sql >> データベース >  >> RDS >> Oracle

オラクルトリガーログ

    これは、pragma autonomous_transactionを使用できるまれなケースの1つです。 。これにより、メイントランザクションに影響を与えることなくコミットできます。注意して使用してください。 自律トランザクション の詳細をご覧ください およびautonomous_transactionプラグマ

    次に例を示します。

       -- 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. mysql:2つの日時の間のレコード数を取得します

    2. idが一致する場合にmysqlから行を選択する

    3. MySQLエラー接続が多すぎます

    4. PDOを使用してOutパラメータを使用してストアドプロシージャを呼び出す