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

结束 

你可能感兴趣的:(Cursor)