Oracle:PLSQL游标

PLSQL游标

什么是游标/光标【cursor】

指向查询结果集的指针,指向哪一行,提取哪一行的数据(PLSQL的游标默认指向结果集的第一行)。

类似于JDBC中的ResultSet对象的功能,从上向下依次获取每一记录的内容。

显示游标的四个属性

游标变量 %found: 当最近一次读入记录成功时返回true

游标变量 %notfound:当最近一次读入记录失败时返回true

游标变量 %isopen:判断游标是否已经打开

游标变量 %rowcount:返回已从游标中读取的记录数

隐示游标的四个属性,固定名称SQL

SQL%FOUND:判断SQL语句是否成功执行。当有作用行时为true,否则为false

SQL%NOTFOUND:判断SQL语句是否成功执行。当有作用行时为false,否则为true

SQL%ISOPEN:游标是否打开,当执行CURD时,Oracle会隐含地打开游标,且在该语句执行完毕或隐含地关闭,在隐式游标中,该值永远为false

SQL%ROWCOUNT:操作影响的行数

注意:必须在事务结束之前读取游标属性,只能读取最近的一次DML操作的游标状态

使用游标分为4个步骤

1、声明游标:cursor 游标变量 is 查询语句

2、打开游标:open 游标变量(不能重复打开游标)

3、提取数据:fetch 游标变量 into 变量1,变量2,.

4、关闭游标:close 游标变量

--使用无参光标cursor,查询所有员工的姓名和工资【如果需要遍历多条记录时,使用光标cursor,无记录找到使用cemp%notfound】
declare
    --定义游标 
    cursor cemp is select ename,sal from emp;
    --定义变量
    vename emp.ename%type;
    vsal emp.sal%type;
begin
    --打开游标,这时游标位于第一条记录之前
    open cemp;
    --循环	
    loop
       --向下移动游标一次
       fetch cemp into vename,vsal; 
       --退出循环,当游标下移一次后,找不到记录时,则退出循环
       exit when cemp%notfound;
       --输出结果
       dbms_output.put_line(vename||'————'||vsal);
    end loop;
    --关闭游标
    close cemp;
end;
/

 

--使用带参光标cursor,查询10号部门的员工姓名和工资
declare
    cursor cemp(pdeptno emp.deptno%type) is select ename,sal from emp where deptno=pdeptno;
    pename emp.ename%type;
    psal emp.sal%type; 
begin 
    open cemp(&deptno);
    loop
        fetch cemp into pename,psal;	 
        exit when cemp%notfound;
        dbms_output.put_line(pename||'的薪水是'||psal);
    end loop;
    close cemp;
end;
/
--使用无参光标cursor,真正给员工涨工资,ANALYST涨1000,MANAGER涨800,其它涨400,要求显示编号,姓名,职位,薪水
declare
    cursor cemp is select empno,ename,job,sal from emp;
    pempno emp.empno%type;
    pename emp.ename%type;
    pjob emp.job%type;
    psal emp.sal%type;
begin
    open cemp;
    loop
        fetch cemp into pempno,pename,pjob,psal;
        --循环退出条件一定要写
        exit when cemp%notfound;
        if pjob='ANALYST' then
            update emp set sal = sal + 1000 where empno = pempno;
        elsif pjob='MANAGER' then
            update emp set sal = sal + 800 where empno = pempno;
        else 
	    update emp set sal = sal + 400 where empno = pempno;
        end if;
    end loop;
    commit;
    close cemp;
end;
/
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值