SQLエラーを発生させたSQLを捕まえる時に活躍します。(作成ユーザにはADMINISTER DATABASE TRIGGERシステム権限が必要です。)
SERVERERRORトリガーサンプル
CREATE OR REPLACE TRIGGER ERREVENT_TRG AFTER SERVERERROR ON DATABASE DECLARE sql_text ora_name_list_t; v_login_user varchar2(128); cnt PLS_INTEGER; v_stmt clob; BEGIN v_login_user := ora_login_user; cnt := ora_sql_txt(sql_text); FOR i IN 1 .. cnt LOOP v_stmt := v_stmt || sql_text(i); END LOOP; INSERT INTO err_event_table(error_sql_text,login_user) VALUES (v_stmt,v_login_user); END; /
トリガーが書き込むテーブルDDL
-- エラー発生時にトリガーがinsertするテーブル
--
create table err_event_table (
lno number generated by default as identity increment by 1 start with 1 cache 100
,login_user varchar2(128)
,error_sql_text clob
,creatation_date date default sysdate
);