1. 程式人生 > >oracle儲存過程----遍歷遊標的方法(for、fetch、while)

oracle儲存過程----遍歷遊標的方法(for、fetch、while)

oracle儲存過程—-遍歷遊標的方法(for、fetch、while)

上一篇文章地址是:oracle儲存過程—-遊標(cursor)的學習
  本來我想自己寫一下這個,但是後來發現了一個文章,寫的挺好的,也挺容易理解的,所以我就盜竊 了這個作者的文章(不要鄙視我) ,原文地址是:儲存過程中遍歷遊標的三種方式(For,Fetch,While)
  為了以示尊重,我原封不動的扒了過來(盜亦有道)。

/********************************************************************************/
  我是初學資料庫程式設計,在這裡談談我對遊標的理解,如果有什麼理解不對的,還希望路過的大牛們指導一番!

  遊標其實就是結果集,而在實際開發中,常用的是for迴圈去遍歷遊標。直接上程式碼吧。

create or replace procedure myprocedure is
      CURSOR CUR_TEST IS --宣告顯式遊標
             SELECT ECODE,ENAME
              FROM EMP;
      CUR CUR_TEST%ROWTYPE; --定義遊標變數,該變數的型別為基於遊標C_EMP的記錄

    BEGIN 
      --For 迴圈
      FOR CUR IN CUR_TEST LOOP
          --迴圈體
        DBMS_OUTPUT.PUT_LINE('員工編號:'
||CUR.ECODE ||'員工姓名:'|| CUR.ENAME); END LOOP; --Fetch 迴圈 OPEN CUR_TEST;--必須要明確的開啟和關閉遊標 LOOP FETCH CUR_TEST INTO CUR; EXIT WHEN CUR_TEST%NOTFOUND; --迴圈體 DBMS_OUTPUT.PUT_LINE('員工編號:'||CUR.ECODE ||'員工姓名:'|| CUR.ENAME); END LOOP; CLOSE C_EMP; --While
迴圈 OPEN CUR_TEST;--必須要明確的開啟和關閉遊標 FETCH CUR_TEST INTO CUR; WHILE CUR_TEST%FOUND LOOP --迴圈體 DBMS_OUTPUT.PUT_LINE('員工編號:'||CUR.ECODE ||'員工姓名:'|| CUR.ENAME); FETCH CUR_TEST INTO CUR; END LOOP; CLOSE C_EMP; END myprocedure;
使用For迴圈的有什麼好處?

  從程式碼中可以很明顯的看出:

  1. 使用for迴圈不需要關注遊標是否開啟或關閉。
  2. for迴圈會自動將資料fetch到記錄型變數。
  3. for迴圈不需要關注何時要退出,也就是不需要寫退出滿足條件。遍歷完成就會退出。
  所以for迴圈是用來循環遊標的最好方法。高效,簡潔,安全。