サーチ…


備考

自律型トランザクションの典型的な使用例は次のとおりです。

  1. 上記の例で説明したエラーロギングフレームワークのようなロギングフレームワークを構築するため。
  2. トランザクションの最終ステータス(COMMITまたはROLLBACK)に関係なく、表のトリガーでDML操作を監査します。

ロギングエラーのための自律型トランザクションの使用

次の手順は、一般的なエラーログテーブルにアプリケーションのすべてのエラーを記録するために使用される一般的な手順です。

CREATE OR REPLACE PROCEDURE log_errors
(
  p_calling_program IN VARCHAR2,
  p_error_code IN INTEGER,
  p_error_description IN VARCHAR2
)
IS
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  INSERT INTO error_log
  VALUES
  (
  p_calling_program,
  p_error_code,
  p_error_description,
  SYSDATE,
  USER
  );
  COMMIT;
END log_errors;

次の匿名PLSQLブロックは、log_errorsプロシージャの呼び出し方法を示しています。

BEGIN
   DELETE FROM dept WHERE deptno = 10;
EXCEPTION
   WHEN OTHERS THEN
      log_errors('Delete dept',sqlcode, sqlerrm);
      RAISE;
END;

SELECT * FROM error_log;

CALLING_PROGRAM    ERROR_CODE    ERROR_DESCRIPTION                                                ERROR_DATETIME         DB_USER
Delete dept        -2292         ORA-02292: integrity constraint violated - child record found    08/09/2016             APEX_PUBLIC_USER


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow