記錄變數定義乙個記錄變數使用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迴圈的游標按照正常的宣告方式宣...