Oracle PL/SQL 游標資料異動條件(使用WHERE CURRENT OF)

更簡單的資料異動方法

前言

使用游標提取資料進行資料異動時,除了可以自行下WHERE條件篩選欲更新資料,亦可使用「WHERE CURRENT OF」當作資料篩選條件,使用起來更為輕鬆方便。

實作

使用語法如下

  • UPDATE 用法
1
UPDATE 資料表 SET 欄位 = 修改值, ... WHERE CURRENT OF 游標名稱;
  • DELETE 用法
1
DELETE FROM 資料表 WHERE CURRENT OF 游標名稱;

以下進行相關示範

 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
34
35
DECLARE
    -- 宣告變數
    V_TITLE ARTICLE.TITLE%TYPE;
    -- 宣告 RECORD
    R_ARTICLE ARTICLE%ROWTYPE;
    -- 宣告游標
    CURSOR C_ARTICLE IS SELECT * FROM ARTICLE FOR UPDATE OF TITLE, MODIFY_DATE;
BEGIN
    -- 開啟游標
    OPEN C_ARTICLE;
    DBMS_OUTPUT.PUT_LINE('開啟游標');

    -- 提取資料
    FETCH C_ARTICLE INTO R_ARTICLE;
    DBMS_OUTPUT.PUT_LINE('提取資料');

    WHILE C_ARTICLE%FOUND LOOP
        -- 設定 V_TITLE 變數
        V_TITLE := '楊藝的洋溢生活 - ' || R_ARTICLE.TITLE;

        -- 調整 TITLE
        UPDATE ARTICLE SET TITLE = V_TITLE, MODIFY_DATE = SYSDATE  WHERE CURRENT OF C_ARTICLE;
        DBMS_OUTPUT.PUT_LINE('ID: ' || R_ARTICLE.ID || ', TITLE: ' || R_ARTICLE.TITLE || ', 修改為:' || V_TITLE);

        -- 提取資料
        FETCH C_ARTICLE INTO R_ARTICLE;
    END LOOP;
    -- 確認交易並解除鎖定
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('確認交易');

    -- 關閉游標
    CLOSE C_ARTICLE;
    DBMS_OUTPUT.PUT_LINE('關閉游標');
END;

執行結果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
開啟游標
提取資料
ID: 7C5E3A5AD847F0D3E050A8C0FD894690, TITLE: 我的第一篇 PL/SQL 筆記, 修改為:楊藝的洋溢生活 - 我的第一篇 PL/SQL 筆記
ID: 7C5E3A5AD848F0D3E050A8C0FD894690, TITLE: 我的 JAVA 學習歷程, 修改為:楊藝的洋溢生活 - 我的 JAVA 學習歷程
ID: 7C5E3A5AD849F0D3E050A8C0FD894690, TITLE: C# 程式架構, 修改為:楊藝的洋溢生活 - C# 程式架構
ID: 7C5E3A5AD84AF0D3E050A8C0FD894690, TITLE: Eclipse 程式碼提示設定, 修改為:楊藝的洋溢生活 - Eclipse 程式碼提示設定
ID: 7C5E3A5AD84BF0D3E050A8C0FD894690, TITLE: TightVNC 檔案傳輸, 修改為:楊藝的洋溢生活 - TightVNC 檔案傳輸
ID: 7C5E3A5AD84CF0D3E050A8C0FD894690, TITLE: Apache Struts 2 檔案上傳, 修改為:楊藝的洋溢生活 - Apache Struts 2 檔案上傳
ID: 7C5E3A5AD84DF0D3E050A8C0FD894690, TITLE: Apache Struts 2 表單驗證 (驗證框架), 修改為:楊藝的洋溢生活 - Apache Struts 2 表單驗證 (驗證框架)
ID: 7C5E3A5AD84EF0D3E050A8C0FD894690, TITLE: Apache Struts 2 攔截器設定與使用, 修改為:楊藝的洋溢生活 - Apache Struts 2 攔截器設定與使用
ID: 7C5E3A5AD84FF0D3E050A8C0FD894690, TITLE: MySQL 外部 IP 連線 (Ubuntu Server), 修改為:楊藝的洋溢生活 - MySQL 外部 IP 連線 (Ubuntu Server)
ID: 7C5E3A5AD850F0D3E050A8C0FD894690, TITLE: CentOS 切換 root 免密碼設定, 修改為:楊藝的洋溢生活 - CentOS 切換 root 免密碼設定
確認交易
關閉游標