光标之光标的属性和光标数的限制
光标的属性
属性 | 描述 |
---|---|
%found | 返回TRUE如果一个INSERT,UPDATE或DELETE语句影响了一行或多行或SELECT INTO语句返回一行或多行。否则,它将返回FALSE。 |
%notfound | 逻辑相反%FOUND。返回TRUE如果一个INSERT,UPDATE或DELETE语句影响没有行或SELECT INTO语句返回任何行。否则,它将返回FALSE。 |
%isopen | 判断光标是否打开 |
%rowcount | 返回受INSERT,UPDATE影响的行数,或DELETE语句,或者通过一个SELECT INTO语句返回。 |
%isopen属性案例
SET SERVEROUTPUT ON
DECLARE
---定义光标代表给哪些员工涨工资
cursor cemp is select employee_id,job_title from EMPLOYEES,JOBS where EMPLOYEES.JOB_ID = JOBS.JOB_ID;
pempno EMPLOYEES.employee_id%type;
pjob JOBS.JOB_TITLE%TYPE;
BEGIN
--打开光标
open cemp;
if cemp%isopen then
DBMS_OUTPUT.PUT_LINE('光标已经打开');
else
DBMS_OUTPUT.PUT_LINE('光标没有打开');
end if;
--关闭光标
close cemp;
end;
/
%rowcount属性案例
SET SERVEROUTPUT ON
DECLARE
---定义光标代表给哪些员工涨工资
cursor cemp is select employee_id,job_title from EMPLOYEES,JOBS where EMPLOYEES.JOB_ID = JOBS.JOB_ID;
pempno EMPLOYEES.employee_id%type;
pjob JOBS.JOB_TITLE%TYPE;
BEGIN
--打开光标
open cemp;
loop
--取出一条记录
fetch cemp into pempno,pjob;
exit when cemp%notfound;
--打印rowcount的值
dbms_output.put_line('rowcount:'||cemp%rowcount);
end loop;
--关闭光标
close cemp;
end;
/
光标的限制
默认情况下,oracle数据库只允许在同一个会话中,打开300个光标
修改光标数的限制:
alter system set open_corsors=400 scope=both;
scope 的取值:
both:两个都改
memory:只更改当前实例,不更改参数文件
spfile:只更改参数文件(需要重启)
show parameter cursor;
查询光标的数量(在SYS中查询修改)