PLSQL中对cursor 使用的小例子

开始

SET SERVEROUTPUT ON;

DECLARE
  v_empno emp.empno%TYPE;
  v_ename emp.ename%TYPE;
  
  CURSOR emp_cursor IS
  SELECT empno,ename from emp where empno<>1000;
  
BEGIN

LOOP

  IF NOT emp_cursor%ISOPEN  THEN
     OPEN emp_cursor;
  END IF; 
  
  FETCH emp_cursor INTO  v_empno,v_ename; 
  EXIT WHEN emp_cursor%NOTFOUND;
 
  dbms_output.put_line('empno is:' || v_empno || ' emp name is:' || v_ename);
    
END LOOP;

END;
/

运行结果

anonymous block completed
empno is:7369 emp name is:SMITH
empno is:7499 emp name is:ALLEN
empno is:7521 emp name is:WARD
empno is:7566 emp name is:JONES
empno is:7654 emp name is:MARTIN
empno is:7698 emp name is:BLAKE
empno is:7782 emp name is:CLARK
empno is:7788 emp name is:SCOTT
empno is:7839 emp name is:KING
empno is:7844 emp name is:TURNER
empno is:7876 emp name is:ADAMS
empno is:7900 emp name is:JAMES
empno is:7902 emp name is:FORD
empno is:7934 emp name is:MILLER

要注意的一点:FETCH 后,马上进行EXIT 比较好。这是因为如果不是这样,在循环中还有来一次,此时可能有干了一些操作,这回导致出现问题。

还有一点,由于 第一次FETCH之前,%NOTFOUND 的值为空。

所以如果 FETCH 从来没有真的成功过,那么 EXIT WHEN emp_cusor%NOTFOUND 有可能一直为NULL,这样就一直在循环里无法退出。所以,更好的写法是:

EXIT WHEN emp_cursor%NOTFOUND OR emp_cursor%NOTFOUND IS NULL

结束 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值