Oracle 游標使用大全3

2021-04-12 22:30:32 字數 3520 閱讀 1823

記錄變數定義乙個記錄變數使用type命令和%rowtype,關於%rowstype的更多資訊請參閱相關資料。記錄變數用於從游標中提取資料行,當游標選擇很多列的時候,那麼使用記錄比為每列宣告乙個變數要方便得多。當在表上使用%rowtype並將從游標中取出的值放入記錄中時,如果要選擇表中所有列,那麼在select子句中使用*比將所有列名列出來要安全得多。

例:set serveriutput on

declare

r_emp emp%rowtype;

cursor c_emp is select * from emp;

begin

open c_emp;

loop

fetch c_emp into r_emp;

exit when c_emp%notfound;

dbms_out.put.put_line('salary of employee'||r_emp.ename||'is'|| r_emp.salary);

end loop;

close c_emp;

end;

%rowtype也可以用游標名來定義,這樣的話就必須要首先宣告游標:

set serveriutput on

declare

cursor c_emp is select ename,salary from emp;

r_emp c_emp%rowtype;

begin

open c_emp;

loop

fetch c_emp into r_emp;

exit when c_emp%notfound;

dbms_out.put.put_line('salary of employee'||r_emp.ename||'is'|| r_emp.salary);

end loop;

close c_emp;

end;

帶引數的游標

與儲存過程和函式相似,可以將引數傳遞給游標並在查詢中使用。這對於處理在某種條件下開啟游標的情況非常有用。它的語法如下:

cursor cursor_name[(parameter[,parameter],...)] is select_statement;

定義引數的語法如下:

parameter_name [in] data_type[ value]

與儲存過程不同的是,游標只能接受傳遞的值,而不能返回值。引數只定義資料型別,沒有大小。

另外可以給引數設定乙個預設值,當沒有引數值傳遞給游標時,就使用預設值。游標中定義的引數只是乙個佔位符,在別處引用該引數不一定可靠。

在開啟游標時給引數賦值,語法如下:

open cursor_name[value[,value]....];

引數值可以是文字或變數。

例:decalre

cursor c_dept is select * from dept order by deptno;

cursor c_emp (p_dept varachar2) is

select ename,salary

from emp

where deptno=p_dept

order by ename

r_dept dept%rowtype;

v_ename emp.ename%type;

v_salary emp.salary%type;

v_tot_salary emp.salary%type;

begin

open c_dept;

loop

fetch c_dept into r_dept;

exit when c_dept%notfound;

dbms_output.put_line('department:'|| r_dept.deptno||'-'||r_dept.dname);

v_tot_salary:=0;

open c_emp(r_dept.deptno);

loop

fetch c_emp into v_ename,v_salary;

exit when c_emp%notfound;

dbms_output.put_line('name:'|| v_ename||' salary:'||v_salary);

v_tot_salary:=v_tot_salary+v_salary;

end loop;

close c_emp;

dbms_output.put_line('toltal salary for dept:'|| v_tot_salary);

end loop;

close c_dept;

end;

游標for迴圈

在大多數時候我們在設計程式的時候都遵循下面的步驟:

1、開啟游標

2、開始迴圈

3、從游標中取值

4、檢查那一行被返回

5、處理

6、關閉迴圈

7、關閉游標

可以簡單的把這一類**稱為游標用於迴圈。但還有一種迴圈與這種型別不相同,這就是for迴圈,用於for迴圈的游標按照正常的宣告方式宣告,它的優點在於不需要顯式的開啟、關閉、取資料,測試資料的存在、定義存放資料的變數等等。游標for迴圈的語法如下:

for record_name in

(corsor_name[(parameter[,parameter]...)]

| (query_difinition)

loop

statements

end loop;

下面我們用for迴圈重寫上面的例子:

decalre

cursor c_dept is select deptno,dname from dept order by deptno;

cursor c_emp (p_dept varachar2) is

select ename,salary

from emp

where deptno=p_dept

order by ename

v_tot_salary emp.salary%type;

begin

for r_dept in c_dept loop

dbms_output.put_line('department:'|| r_dept.deptno||'-'||r_dept.dname);

v_tot_salary:=0;

for r_emp in c_emp(r_dept.deptno) loop

dbms_output.put_line('name:' || v_ename || 'salary:' || v_salary);

v_tot_salary:=v_tot_salary+v_salary;

end loop;

dbms_output.put_line('toltal salary for dept:'|| v_tot_salary);

end loop;

end;

Oracle 游標使用大全 1

查詢 select語句用於從資料庫中查詢資料,當在pl sql中使用select語句時,要與into子句一起使用,查詢的返回值被賦予into子句中的變數,變數的宣告是在delcare中。select into語法如下 select distict all into variable variable...

Oracle 游標使用大全2

游標for迴圈 在大多數時候我們在設計程式的時候都遵循下面的步驟 1 開啟游標 2 開始迴圈 3 從游標中取值 4 檢查那一行被返回 5 處理 6 關閉迴圈 7 關閉游標 可以簡單的把這一類 稱為游標用於迴圈。但還有一種迴圈與這種型別不相同,這就是for迴圈,用於for迴圈的游標按照正常的宣告方式宣...

Oracle 游標使用大全2

游標for迴圈 在大多數時候我們在設計程式的時候都遵循下面的步驟 1 開啟游標 2 開始迴圈 3 從游標中取值 4 檢查那一行被返回 5 處理 6 關閉迴圈 7 關閉游標 可以簡單的把這一類 稱為游標用於迴圈。但還有一種迴圈與這種型別不相同,這就是for迴圈,用於for迴圈的游標按照正常的宣告方式宣...