oracle

Oracle SERVERERRORトリガー

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
);
スポンサーリンク
コピペで使う