PL/SQL 光标的使用

--游标(光标)的使用
--查询打印员工的姓名和薪水
/*
光标的属性
%found
%notfound
%isopen 判读光标是否打开
%rowcount 影响的行数
*/
set serveroutput on 
declare
--定义光标
cursor cemp is select ename,sal from emp;

--为光标定义变量
pename emp.ename%type;
psal emp.sal%type;

begin

open cemp;

loop

fetch cemp into pename,psal;
--思考 1. 循环什么时候结束? 2. fetch不一定能取到记录
exit when %notfound
dbms_output.put_line(pename||" "||psal);
end loop;
close cemp;
end;

--给员工涨工资
set serveroutput on 
declare
--定义光标 给哪些员工涨工资
cursor cemp is select empno,empjob from emp;
pempno emp.empno%type;
pjob emp.empjob%type;
begin
open cemp;
loop
fetch cemp into pempno,pjob;
exit when cemp%notfound
if pjob = 'p1' then update emp set sal=sal+1000 where empno = pempno;
    elsif pjob= 'p2 ' then update emp set sal=sal+500 where empno = pempno;
    else then update emp set sal=sal+100 where empno = pempno;
end if;
end loop;
close cemp;
commit;
end;

--修改光标数的限制
--系统对于同时打开的光标数量是有限制的,超过规定的数量,就不可以打开了 
alter system set open_cursors = 400 scope = both;
scope 的取值:both memory spfile

--带参数的光标
--查询某个部门中员工的姓名
set serveroutput on
declare
cursor cemp(dno number) is select enmame from emp where deptno=dno;
pename emp.ename%type;
begin;
--查询10号部门 人员的姓名
open cemp(10);
loop;
    fetch cemp into pename;
    exit when cemp%notfound;
    dbms_output.put_line(pename);

end loop;

end;

你可能感兴趣的:(PL/SQL 光标的使用)