光标的属性:
1. fetch 语句从光标中是否取到记录
%found true/flase
%notfound true/false
2. %isopen 判断光标是否打开
例子:
1 set SERVEROUTPUT ON 2 3 declare 4 --定义光标 5 cursor cemp is select ename, empjob from emp; 6 pempno emp.empno%type; 7 pjob emp.empjob%type; 8 begin 9 10 --打开光标 11 open cemp; 12 13 if cemp%isopen then 14 DBMS_OUTPUT.PUT_LINE('光标已经打开'); 15 else 16 dbms_output.put_line('光标没有打开'); 17 end if; 18 19 --关闭光标 20 close cemp; 21 22 end; 23 /
结果:
3. rowconut 影响的行数
1 set SERVEROUTPUT ON 2 3 declare 4 --定义光标 5 cursor cemp is select empno, empjob from emp; 6 pempno emp.empno%type; 7 pjob emp.empjob%type; 8 begin 9 10 --打开光标 11 open cemp; 12 13 loop 14 --取出一条记录 15 fetch cemp into pempno,pjob; 16 exit when cemp%notfound; 17 18 --打印rowcount的值 19 dbms_output.put_line('rowcount:'||cemp%rowcount); 20 21 end loop; 22 23 --关闭光标 24 close cemp; 25 26 end; 27 /
结果:
光标的限制
在默认情况下,Oracle数据库只允许在同一个会话中,打开300个光标。
修改光标数的限制:
1 alter system set open_cursors=400 scope =both;