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

結束 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM