游標
游標主要分兩類動態和靜態游標,靜態游標是編譯時知道明確的select語句的游標,靜態游標分類兩種,顯示游標和靜態游標,這里只說顯示游標
顯示游標
declare name emp.ename%type; sal emp.sal%type; --聲明兩個變量 cursor emp_currsor is --聲明游標 select ename,sal from emp; begin open emp_currsor; --第一步打開游標 loop fetch emp_currsor into name,sal; --fetch提取游標 exit when emp_currsor%notfound; --判斷游標是否還有值 dbms_output.put_line('第'||emp_currsor%rowcount||'個雇員'||name||sal); end loop; close emp_currsor; --最后一步關閉游標 end;
顯示游標屬性
%found:只有在DML語句影響一行或者多行時,%found屬性才返回true
%notfound:如果沒有影響任何行返回true
%rowcount:屬性返回DML語句影響的行數.如果DML語句沒有影響任何行,則%rowcount屬性返回0
%isopen:返回游標是否已被打開
循環讀取游標
declare cursor cu_emp is select * from emp; lr_emp cu_emp%rowtype; --聲明變量 begin for lr_emp in cu_emp loop dbms_output.put_line('empName: ' || lr_emp.ename); end loop; end;
結果:
存儲過程
--創建存儲過程 create or replace procedure proc_getEmpList(v_empno number,vara varchar) is --遍歷游標 cursor cu_emp is select * from emp; lr_emp cu_emp%rowtype; --聲明變量 begin dbms_output.put_line('v_empno: ' || v_empno||'vara:'||vara); for lr_emp in cu_emp loop dbms_output.put_line('empName: ' || lr_emp.ename); end loop; end; --調用 begin proc_getEmpList(123,'00'); end;