› Fóruns › Banco de dados Oracle › Registrar apenas erros no SPOOL › Registrar apenas erros no SPOOL
Oi Gil,
Segue o código que utilizo, fiz algumas modificações pra que possa atender melhor o seu caso.
Tabela:
CREATE TABLE "ERROR_LOG"
( "TIMESTAMP" DATE,
"ERROR_STACK" VARCHAR2(2000 BYTE),
"OWNER" VARCHAR2(30 BYTE),
"SQL" VARCHAR2(4000 BYTE)
);
Trigger:
create or replace TRIGGER TG_CAPTURA_EXCECAO_01
AFTER SERVERERROR
ON DATABASE
DECLARE
v_stmt CLOB;
n NUMBER;
sql_text ora_name_list_t;
BEGIN
n := ora_sql_txt(sql_text);
FOR i IN 1..n LOOP
v_stmt := v_stmt || sql_text(i);
END LOOP;
INSERT INTO error_log
VALUES (SYSDATE, DBMS_UTILITY.FORMAT_ERROR_STACK, ora_dict_obj_owner, v_stmt);
END TG_CAPTURA_EXCECAO_01;
Essa trigger vai ser acionada sempre que ocorrer algum erro ORA no banco de dados (com exceção de alguns). Você ainda pode diminuir o escopo da trigger alterando a cláusula ON DATABASE pra ON nome_do_esquema.SCHEMA, e executar os comandos com o mesmo usuário do esquema informado.
Segue um link pra entender melhor.
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7004.htm