トリガー メモ


CREATE [ OR REPLACE ] TRIGGER トリガー名
        { BEFORE | AFTER | INSTEAD OF }
        { INSERT | UPDATE [OF 列名,...] | DELETE }
          [OR {INSERT | UPDATE [OF 列名,...] | DELETE }]
          [... ]
        ON テーブル名
        [ FOR EACH ROW ]
        [ WHEN 条件式 ]
        BEGIN
            処理内容
        END ;

INSTEAD OF 
 テーブルに対してデータ操作文が発行されたときに、
 そのデータ操作文は実行されず、トリガーだけを起動します
 INSTEAD OFオプションを使用する場合、トリガーを実行する文にはビューのみを指定します。
 逆に、ビューがトリガーを実行する文に指定されている場合は、INSTEAD OFオプションのみを使用できます。  

FOR EACH ROW
 複数の行に対するデータ操作文が発行されるとき、各行ごとにトリガーが起動します。
 これを指定しない場合は、複数の行に対するデータ操作文が発行されても、
 トリガーは一度だけしか起動されません。

CREATE OR REPLACE TRIGGER Print_salary_changes
  BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
  FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
    sal_diff number;
BEGIN
    sal_diff  := :new.sal  - :old.sal;
    dbms_output.put('Old salary: ' || :old.sal);
    dbms_output.put('  New salary: ' || :new.sal);
    dbms_output.put_line('  Difference ' || sal_diff);
END;
/

CREATE OR REPLACE TRIGGER On_Logon  
  AFTER LOGON  
  ON The_user.Schema  
BEGIN  
  Do_Something;  
END;  

テーブル単位にトリガーを有効、無効を切り替え
ALTER TABLE table_name DISABLE ALL TRIGGERS ;
ALTER TABLE table_name ENABLE ALL TRIGGERS ;

特定のトリガーだけを無効化
ALTER TRIGGER trigger_name DISABLE;
ALTER TRIGGER trigger_name ENABLE;

[一つ前に戻る] TOP PAGE
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送