自立型トランザクション

メモ:

メインのトランザクションとは別に独立してトランザクションを実行することができる、「自立型トランザクション」の動作について確認していきます。

AUTONOMOUS_TRANSACTIONを使う

Oracleでは、メインのトランザクションとは別に独立してトランザクションを実行することが出来ます。

これを利用して、ログを記録するようにしてみます。デバッグなどでメインのトランザクションはロールバックし、その原因をログにはいたりするようにしてみます。

まず、テーブルを作成します。

CREATE TABLE LOG
(
    LOGINDEX                       NUMBER(4,0) NOT NULL,
    LOG_LEVEL                      VARCHAR2(16),
    SOURCE                         VARCHAR2(128),
    DATETIME                       DATE DEFAULT SYSDATE,
    ERR_CODE                       VARCHAR2(8),
    MSG                            VARCHAR2(512),
    CONSTRAINT PK_LOG4AR PRIMARY KEY (LOGINDEX) USING INDEX
)

ログを記録するプロシージャを作成します。

CREATE OR REPLACE PROCEDURE LOG_PUT_LINE(LOG_LEVEL VARCHAR2,SOURCE VARCHAR2,SQL_CODE VARCHAR2,MESSAGE VARCHAR2) 
IS
    PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    INSERT INTO LOG4AR(LOGINDEX,LOG_LEVEL,SOURCE,ERR_CODE,MSG)
        VALUES (SEQ_LOG.NEXTVAL,LOG_LEVEL,SOURCE,SQL_CODE,MESSAGE);
    COMMIT;
END;

PRAGMA AUTONOMOUS_TRANSACTIONにより、呼び出し元とは別にトランザクションが実行されます。