Oracle PL/SQL隱式游標(Implicit Cursor)

使用隱式游標進行資料處理

Oracle提供游標的方式,讓開發者可以更細膩地進行資料處理,而游標主要是針對SELECT敘述所回傳的結果集,再進行資料的逐筆處理動作。

游標主要分為以下兩種類型:

  • 隱式游標 (Implicit Cursor):此游標由Oracle自動建立管理。
  • 顯式游標 (Explicit Cursor):此游標由開發人員進行建立與控制。

隱式游標由Oracle自動建立管理,進行如INSERT、UPDATE、DELETE以及SELECT INTO等動作皆會建立隱式游標,並由Oracle自動開啟、提取以及關閉。

開發者可透過以下常用屬性取得游標相關資訊:

  • %FOUND:進行如INSERT、UPDATE、DELETE以及SELECT INTO等動作時,若影響一或多筆資料,就會回傳TRUE,否則為FALSE。
  • %NOTFOUND:與%FOUND相反,進行如INSERT、UPDATE、DELETE以及SELECT INTO等動作時,若沒有影響任何資料,就會回傳TRUE,否則為FALSE。
  • %ISOPEN:游標是否為開啟狀態,若使用隱式游標時,則總是回傳FALSE,因資料庫進行完SQL敘述後,會自斷關閉。
  • %ROWCOUNT:進行如INSERT、UPDATE、DELETE以及SELECT INTO等動作時,所影響的筆數。

*使用以上屬性前面須加上 SQL 做為游標名稱,如 SQL%FOUND 。

以下進行相關示範

1
2
3
4
5
6
7
8
9
DECLARE
    V_TITLE ARTICLE.TITLE%TYPE := '我的第一篇 PL/SQL 筆記';
BEGIN
    DBMS_OUTPUT.PUT_LINE('文章標題為: ' || V_TITLE);
    INSERT INTO ARTICLE(ID, TITLE, CREATE_DATE) VALUES (SYS_GUID(), V_TITLE, SYSDATE);
    IF SQL%FOUND THEN
        DBMS_OUTPUT.PUT_LINE('新增筆數為: ' || SQL%ROWCOUNT);
    END IF;
END;

執行結果

1
2
文章標題為: 我的第一篇 PL/SQL 筆記
新增筆數為: 1