游标使用小笔记

隐式游标通常使用于判断更新数据行或删除数据行的情况,例如:

set serverouput on 
BEGIN
   UPDATE emp SET sal=sal*1.2
   WHERE job='SALEMAN';
   IF sql%notfound THEN
     DBMS_OUTPUT.PUT_LINE('没有员工工资上调');
   ELSE
     DBMS_OUTPUT.PUT_LINE('有'||sql%rowcount||'个员工工资上调');
 END IF;
END;

显示游标通常用于查询结果集(即由SELECT语句返回的查询结果)

DECLARE
  /*声明游标,查询员工信息*/
  CURSOR cur_emp (var_job in varchar2:='SALESMAN')
  IS SELECT empno,ename,sal
     FROM emp
     WHERE job=var_job;
  TYPE record_emp IS RECORD    --声明一个记录类型(RECORD类型)
  (
    /*定义当前记录的成员变量*/
    var_empno emp.empno%TYPE,
    var_ename emp.ename%TYPE,
    var_sal emp.sal%TYPE
  );
  emp_row record_emp;          --声明一个record_emp类型的变量
BEGIN
  OPEN cur_emp('MANAGER');     --打开游标
  FETCH cur_emp INTO emp_row;  --先让指针指向结果集中的第一行,并将值保存到emp_row中
  WHILE cur_emp%found LOOP
    dbms_output.put_line(emp_row.var_ename||'的编号是'||emp_row.var_empno||',工资是'||emp_row.var_sal);
    FETCH cur_emp INTO emp_row;	--让指针指向结果集中的下一行,并将值保存到emp_row中
 END LOOP;
  CLOSE cur_emp;               --关闭游标
END;
/

游标变量是动态的,可以与不同的select语句关联,而显示游标只能是静态的,是可知的。

set serveroutput on
DECLARE
  TYPE ref_dept IS REF CURSOR                --定义游标类型ref_dept
  RETURN dept%ROWTYPE;
  cur_dept ref_dept;                 	         --定义游标变量cur_dept
  deptRow dept%ROWTYPE;                       --定义行类型
BEGIN
  OPEN cur_dept FOR SELECT * FROM dept;     --打开游标
  LOOP
    FETCH cur_dept INTO deptRow;             --取得游标数据
    EXIT WHEN cur_dept%notfound;             --当没有数据时退出循环,则不再读取数据
    dbms_output.put_line('部门编号为:'||deptRow.deptno||',部门名称为:'||deptRow.dname||',位于'||deptRow.loc);
  END LOOP;
  CLOSE cur_dept;                            --关闭游标
END;
/
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值