独自のログをロールしてテーブルにログインする場合は、自律トランザクションを実行できます。 ルート。
自律型トランザクションは、現在のトランザクションとは関係なくコミットできるトランザクションです。
これにより、ストアドプロシージャまたはバッチプロセスの親トランザクションの成功または失敗に関係なく、必要なすべての情報をログテーブルに記録してコミットできます。
CREATE OR REPLACE PROCEDURE "SP_LOG" (
P_MESSAGE_TEXT VARCHAR2
) IS
pragma autonomous_transaction;
BEGIN
DBMS_OUTPUT.PUT_LINE(P_MESSAGE_TEXT);
INSERT INTO PROCESSING_LOG (
MESSAGE_DATE,
MESSAGE_TEXT
) VALUES (
SYSDATE,
P_MESSAGE_TEXT
);
COMMIT;
END;
/
次に、このように呼び出すと、障害が発生してトランザクションをロールバックした場合でも、ログテーブルにメッセージをコミットできます。
BEGIN
SP_LOG('Starting task 1 of 2');
... code for task 1 ...
SP_LOG('Starting task 2 of 2');
... code for task 2 ...
SP_LOG('Ending Tasks');
... determine success or failure of process and commit or rollback ...
ROLLBACK;
END;
/
コードにとって意味のある例外を除いて整理することもできますが、それは一般的な考え方であり、SP_LOGの呼び出しで書き込まれたデータは保持されますが、親トランザクションはロールバックできます。