自立型トランザクション
メインのトランザクションとは別に独立してトランザクションを実行することができる、「自立型トランザクション」の動作について確認していきます。
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により、呼び出し元とは別にトランザクションが実行されます。