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;
|