日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

事務管理

更新时间:2023-12-14 06:13:49

本文介紹了事務管理的相關內容。

簡介

在由CALL命令調用的過程中以及匿名代碼塊(DO命令)中,可以用命令COMMITROLLBACK結束事務。在一個事務被使用這些命令結束后,一個新的事務會被自動開始,因此沒有單獨的START TRANSACTION命令(注意BEGINEND在 PL/SQL 中有不同的含義)。

這里是一個簡單的例子:

    CREATE PROCEDURE transaction_test1()
    IS
    BEGIN
        FOR i IN 0..9 LOOP
            INSERT INTO test1 (a) VALUES (i);
            IF i % 2 = 0 THEN
                COMMIT;
            ELSE
                ROLLBACK;
            END IF;
        END LOOP;
    END;

    CALL transaction_test1();

新事務開始時具有默認事務特征,如事務隔離級別。在循環中提交事務的情況下,可能需要以與前一個事務相同的特征來自動啟動新事務。 命令COMMIT AND CHAINROLLBACK AND CHAIN可以完成此操作。

只有在從頂層調用的CALLDO中才能進行事務控制,在沒有任何其他中間命令的嵌套CALLDO調用中也能進行事務控制。例如,如果調用棧是CALL proc1()CALL proc2()CALL proc3(),那么第二個和第三個過程可以執行事務控制動作。但是如果調用棧是CALL proc1()SELECT func2()CALL proc3(),則最后一個過程不能做事務控制,因為中間有SELECT。

對于游標循環有特殊的考慮??纯催@個例子:

    CREATE PROCEDURE transaction_test2()
    IS
    DECLARE
        r RECORD;
    BEGIN
        FOR r IN SELECT * FROM test2 ORDER BY x LOOP
            INSERT INTO test1 (a) VALUES (r.x);
            COMMIT;
        END LOOP;
    END;

    CALL transaction_test2();

通常,游標會在事務提交時被自動關閉。但是,一個作為循環的組成部分創建的游標會自動被第一個COMMITROLLBACK轉變成一個可保持游標。這意味著該游標在第一個COMMITROLLBACK處會被完全計算出來,而不是逐行被計算。該游標在循環后仍會被自動刪除,因此這通常對用戶是不可見的。

有非只讀命令(UPDATE ... RETURNING)驅動的游標循環中不允許有事務命令。

事務在一個具有異常處理部分的塊中不能被結束。

  • 本页导读 (1)
  • 簡介