Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara mengembangkan pemicu setelah serverror di Oracle?

Jangan meminta v$sql; dapatkan pernyataan menggunakan 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;
 /

Kemudian:

SQL> select * from c;

Ini menghasilkan:

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

Itu sekarang dapat ditanyakan:

select * from servererror_log;

Untuk menghasilkan:

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. Bagaimana menghubungkan database Oracle dari PHP

  2. Bagaimana cara mengimpor database Oracle dari file dmp dan file log?

  3. Temukan apakah kolom di Oracle memiliki urutan

  4. Prosedur PL/SQL:Bagaimana mengembalikan pernyataan pilih?

  5. Kondisi Bergabung Oracle dengan Top 1