PL/SQL光标之光标的属性和光标数的限制

光标之光标的属性和光标数的限制

光标的属性

属性 描述
%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中查询修改)

PL/SQL光标之光标的属性和光标数的限制_第1张图片
images

你可能感兴趣的:(PL/SQL光标之光标的属性和光标数的限制)