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

dziennik wyzwalacza wyroczni

Może to być jeden z tych rzadkich przypadków, w których możesz użyć pragma autonomous_transaction . Umożliwi Ci to zatwierdzenie bez wpływu na Twoją główną transakcję. Używaj go ostrożnie. Dowiedz się więcej o transakcjach autonomicznych i autonomous_transaction pragma

Oto przykład:

   -- our error logging table 

   create table tb_log(
      msg varchar2(123)
    )
    /

   -- our working table
   create table tb_table(
     col11 number
    )
    /

-- procedure that is going to log errors


[email protected]> create or replace procedure log_error(p_msg in varchar2)
  2    is
  3      pragma autonomous_transaction;
  4    begin
  5      insert into tb_log(msg)
  6        values(p_msg);
  7      commit;
  8    end;
[email protected]> /

Procedure created.

[email protected]> create or replace trigger tr_tb_table
  2    before insert on tb_table
  3    for each row
  4    begin
  5      if mod(:new.col1, 2) != 0
  6      then
  7         log_error('Error!');
  8         raise_application_error(-20000, 'Error has ocurred!');
  9      end if;
 10    end;
 11  /

Trigger created.

[email protected]> select * from tb_log;

no rows selected

[email protected]> select * from tb_table;

no rows selected

[email protected]> insert into tb_table(col1) values(1);

insert into tb_table(col1) values(1)
            *
ERROR at line 1:
ORA-20000: Error has ocurred!
ORA-06512: at "NK.TR_TB_TABLE", line 5
ORA-04088: error during execution of trigger 'NK.TR_TB_TABLE'


[email protected]> select * from tb_log;

MSG
--------------------------------------------------------------------------------
Error!


  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 zrobić przecięcie na stole składu

  2. Problem z kodowaniem odpowiedzi na żądanie Oracle PL/SQL HTTP

  3. Dlaczego istnieje maksymalna długość nazw procedur składowanych?

  4. Zwróć wszystkich Użytkowników, nawet tych, którzy nie spełniają moich kryteriów

  5. Jak usunąć duplikaty z listygg