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

结束 








本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/11/14/2769377.html,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
存储 关系型数据库 MySQL
十九、游标 Cursor
十九、游标 Cursor
50 0
|
存储 SQL 数据可视化
MySQL_01--游标CURSOR--通过游标(CURSOR)实现对select选择集的迭代使用,解决在Navicat中声明游标就一直报错的问题
我的需求是,一条一条的读取并使用select选择集的结果,使用的数据库可视化软件是Navicat。 但是我在使用游标的过程中一直在游标声明处就报错,试了很多方法,改名字,调整变量顺序都不管用,最后发现,游标需要定义在存储过程(Stored Procedure)函数里。