0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PL/SQLで発生したエラー情報を記録したい

Posted at

Question

F001・F002・F003というFunctionがあり、F001がF002を呼び出し、F002がF003を呼び出すという構造になっています。

CREATE OR REPLACE FUNCTION F001(i_key INT) RETURN INT IS
BEGIN
    RETURN F002(i_key);
END;


CREATE OR REPLACE FUNCTION F002(i_key INT) RETURN INT IS
BEGIN
    RETURN F003(i_key);
END;


CREATE OR REPLACE FUNCTION F003(i_key INT) RETURN INT IS
    v INT;
BEGIN
    SELECT value INTO v FROM TBL WHERE key = i_key;
    RETURN v;
END;

ここで、引数を99としてF001を呼び出したところ、F001がエラーになりました。このエラー情報をどこかに記録する方法はないでしょうか?

Answer

まずはエラー情報を記録するためのテーブルを作成します。

CREATE TABLE error_logs (
    message    VARCHAR2 (4000),
    backtrace  VARCHAR2 (4000),
    callstack  VARCHAR2 (4000),
    created_by TIMESTAMP
);

その後、エラーが発生する関数を呼び出します。このときException節にて、先ほど作成したテーブルにエラー情報をINSERTするようにします。

DECLARE
    v INT;
BEGIN 
    v := F001(99);
EXCEPTION
    WHEN OTHERS THEN
        INSERT INTO error_logs (message, backtrace, callstack, created_by) VALUES (
            SYS.DBMS_UTILITY.FORMAT_ERROR_STACK,
            SYS.DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,
            SYS.DBMS_UTILITY.FORMAT_CALL_STACK,
            SYSDATE
        );
        COMMIT;
END;

実行後、error_logsテーブルにエラー情報が記録されていることが確認できるはずです。

MESSAGE BACKTRACE CALLSTACK CREATED_BY
ORA-01403: データが見つかりません。
ORA-06512: "TS01.F003", 行4
ORA-06512: "TS01.F002", 行3
ORA-06512: "TS01.F001", 行3
ORA-06512: "TS01.F003", 行4
ORA-06512: "TS01.F002", 行3
ORA-06512: "TS01.F001", 行3
ORA-06512: 行4
----- PL/SQL Call Stack -----
object line object
handle number name
0x7c8063f0 1 anonymous block
0xad95e1c8 7 anonymous block
2024/11/15 21:46:44

環境

SELECT * FROM v$version;
BANNER BANNER_FULL BANNER_LEGACY CON_ID
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production 0
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?