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;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值