Oracle PL/SQL顯式游標(Explicit Cursor)透過WHILE提取資料

自訂游標透過HILE提取資料

前言

在游標資料提取上除了使用 LOOP 外,還可透過其他迴圈方式進行,在實作上開發者可運用不同的技巧進行資料處理,本篇記錄如何使用 WHILE 進行游標資料提取。

實作

以下進行相關示範

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
DECLARE
    -- 宣告 RECORD
    R_ROW ARTICLE%ROWTYPE;
    -- 宣告游標
    CURSOR C_ARTICLE IS SELECT * FROM ARTICLE;
BEGIN
    -- 開啟游標
    OPEN C_ARTICLE;

    -- 查看游標是否開啟
    IF  C_ARTICLE%ISOPEN THEN
        DBMS_OUTPUT.PUT_LINE('游標已開啟');
    END IF;

    -- 提取資料
    FETCH C_ARTICLE INTO R_ROW;

    -- 判斷是否有讀取到資料
    WHILE C_ARTICLE%FOUND LOOP
        DBMS_OUTPUT.PUT_LINE('ID: ' || R_ROW.ID || ', TITLE: ' || R_ROW.TITLE || ', CREATE_DATE: ' || R_ROW.CREATE_DATE || ', MODIFY_DATE: ' || NVL(TO_CHAR(R_ROW.MODIFY_DATE), '無'));

        -- 提取資料
        FETCH C_ARTICLE INTO R_ROW;
    END LOOP; 

    -- 關閉游標
    CLOSE C_ARTICLE;

     -- 查看游標是否關閉
    IF NOT C_ARTICLE%ISOPEN THEN
        DBMS_OUTPUT.PUT_LINE('游標已關閉');
    END IF;
END;

執行結果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
游標已開啟
ID: 7C5E3A5AD847F0D3E050A8C0FD894690, TITLE: 我的第一篇 PL/SQL 筆記, CREATE_DATE: 2018-12-07 10:59:37, MODIFY_DATE: 無
ID: 7C5E3A5AD848F0D3E050A8C0FD894690, TITLE: 我的 JAVA 學習歷程, CREATE_DATE: 2018-12-07 12:13:23, MODIFY_DATE: 無
ID: 7C5E3A5AD849F0D3E050A8C0FD894690, TITLE: C# 程式架構, CREATE_DATE: 2018-12-07 12:16:20, MODIFY_DATE: 無
ID: 7C5E3A5AD84AF0D3E050A8C0FD894690, TITLE: Eclipse 程式碼提示設定, CREATE_DATE: 2018-12-07 12:16:20, MODIFY_DATE: 無
ID: 7C5E3A5AD84BF0D3E050A8C0FD894690, TITLE: TightVNC 檔案傳輸, CREATE_DATE: 2018-12-07 12:16:20, MODIFY_DATE: 無
ID: 7C5E3A5AD84CF0D3E050A8C0FD894690, TITLE: Apache Struts 2 檔案上傳, CREATE_DATE: 2018-12-07 12:16:20, MODIFY_DATE: 無
ID: 7C5E3A5AD84DF0D3E050A8C0FD894690, TITLE: Apache Struts 2 表單驗證 (驗證框架), CREATE_DATE: 2018-12-07 12:16:20, MODIFY_DATE: 無
ID: 7C5E3A5AD84EF0D3E050A8C0FD894690, TITLE: Apache Struts 2 攔截器設定與使用, CREATE_DATE: 2018-12-07 12:16:20, MODIFY_DATE: 無
ID: 7C5E3A5AD84FF0D3E050A8C0FD894690, TITLE: MySQL 外部 IP 連線 (Ubuntu Server), CREATE_DATE: 2018-12-07 12:16:20, MODIFY_DATE: 無
ID: 7C5E3A5AD850F0D3E050A8C0FD894690, TITLE: CentOS 切換 root 免密碼設定, CREATE_DATE: 2018-12-07 12:16:20, MODIFY_DATE: 無
游標已關閉