Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak stworzyć wyzwalacz after serverror w Oracle?

Nie pytaj v$sql; pobierz oświadczenie za pomocą ora_sql_txt.

CREATE OR REPLACE TRIGGER log_server_errors
AFTER SERVERERROR
ON DATABASE
DECLARE
sql_text ora_name_list_t;
stmt clob;
n number;
BEGIN
  n := ora_sql_txt(sql_text);
  if n > 1000 then n:= 1000; end if ;
  FOR i IN 1..n LOOP
     stmt := stmt || sql_text(i);
   END LOOP;

   INSERT INTO servererror_log
   (error_datetime, error_user, db_name,
    error_stack, captured_sql)
   VALUES
   (systimestamp, sys.login_user, sys.database_name,
   dbms_utility.format_error_stack, stmt);
   commit;
 END log_server_errors;
 /

Następnie:

SQL> select * from c;

Daje to:

select * from c
              *
ERROR at line 1:
ORA-00942: table or view does not exist

Można to teraz zapytać:

select * from servererror_log;

Aby wyprodukować:

ERROR_DATETIME
---------------------------------------------------------------------------
ERROR_USER                     DB_NAME
------------------------------ ---------
ERROR_STACK
--------------------------------------------------------------------------------
CAPTURED_SQL
--------------------------------------------------------------------------------
11-FEB-09 02.55.35.591259 PM
SYS                            TS.WORLD
ORA-00942: table or view does not exist
select * from c


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć VARRAY jako obiekt bazy danych w bazie danych Oracle

  2. Tworzę ten stół w Oracle 10g

  3. Czy istnieje sposób na zainstalowanie Javy na Oracle 11g XE?

  4. Jakiego typu sterownika JDBC należy użyć w celu uzyskania dostępu do bazy danych Oracle?

  5. Wiosenna partia:nie można zwiększyć tożsamości; zagnieżdżony wyjątek to com.microsoft.sqlserver.jdbc.SQLServerException:nieprawidłowa nazwa obiektu „BATCH_JOB_SEQ”?