oracle儲存過程----遍歷遊標的方法(for、fetch、while)
阿新 • • 發佈:2019-02-01
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迴圈的有什麼好處?
從程式碼中可以很明顯的看出:
- 使用for迴圈不需要關注遊標是否開啟或關閉。
- for迴圈會自動將資料fetch到記錄型變數。
- for迴圈不需要關注何時要退出,也就是不需要寫退出滿足條件。遍歷完成就會退出。