sql >> Database >  >> RDS >> Oracle

orakel trigger-log

Dit kan een van die zeldzame gevallen zijn waarin u pragma autonomous_transaction . kunt gebruiken . Hiermee kunt u committen zonder uw hoofdtransactie te beïnvloeden. Gebruik het met de nodige voorzichtigheid. Meer informatie over autonome transacties en autonomous_transaction pragma

Hier is een voorbeeld:

   -- 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. Kan geen verbinding maken met Postgresql DB in Play-framework

  2. ORA-29913:fout bij het uitvoeren van ODCIEXTTABLEOPEN callout

  3. Gegevens aanwezig in rijen naar kolommen

  4. Postgres:vacuümcommando ruimt dode tupels niet op