Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle тригерен журнал

Това може да е един от онези редки случаи, когато можете да използвате pragma autonomous_transaction . Това ще ви позволи да се ангажирате, без да засяга основната ви транзакция. Използвайте го с повишено внимание. Научете повече за автономни транзакции и autonomous_transaction pragma

Ето един пример:

   -- 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. АКТУАЛИЗАЦИЯ на привидно запазващ ключ изглед в Oracle повдига ORA-01779

  2. Изпълнение на SQL скрипт в oracle db един израз наведнъж

  3. Tomcat 9 с Apache DBCP + Spring 5 + Oracle 12c + SqlArrayValue

  4. Числови функции в Oracle (пълен списък)

  5. Как могат да бъдат обединени няколко реда в един в Oracle, без да се създава съхранена процедура?