DML触发器
DML觸發器:是一種用在 表 上的觸發器,通常在 insert,Update, delete語句上應用。
如果觸發器僅影響一行,則觸發器執行順序:
(1)before 語句觸發器
(2)before 行級觸發器
(3)執行 DML語句
(4)after 行級觸發器
(5)after 語句觸發器
?
如果觸發器影響多行,則觸發器執行順序:
(1)before語句觸發器
(2)被影響的第一行的before行觸發器
(3)第一行執行DML語句
(4)第一行的after行級觸發器
(5)被影響的第二行的before行觸發器
(6)第二行執行DML語句
(7)第二行的after行級觸發器
(8)after語句觸發器
?
語法:
1 create or replace trigger [schema.]trigger_name 2 {before | after} {delete | insert | {update [of column_list]}} on [schema.]table --觸發時機 3 [referencing {OLD as old_name} | {NEW as new_name} | {Parent as parent_name}] --定義OLD、NEW的別名 4 [For each row] --行級觸發器 or 語句級 5 [When (condition)] --觸發器被觸發后,是否執行觸發體代碼的條件 6 plsql_clock | call_procedure_statement其中,(1)before | after:指定觸發器是在對表的操作發生之前觸發還是之后觸發。
可以同時指定多個動作,
1 before delete or insert or update on tb_test在使用Update作為觸發行為時,還可以使用 Update of 指定一個或多個字段,僅在這些字段被更新時才會觸發:
1 before update of column1, column2 ON tb_test(2)when condition : 只有滿足when指定的條件,才會執行觸發體中的代碼。在when子句中,可以使用以下幾個謂詞:
OLD 謂詞:執行前的字段的值的名稱,比如 Update一個表時,使用 OLD.column1 是指執行Update操作之前的列的值。
NEW 謂詞:執行后的字段的值的名稱,比如 Update一個表時,使用 NEW.column1是指執行 Update操作之后的列的值。
? ? ? 在觸發器內部使用NEW和OLD謂詞時,要在前面加上 :冒號,在WHEN子句中,可以不加上冒號。
(3)可以在觸發器體的語句塊中使用 INSERTING、UPDATING、DELETING謂詞,這些謂詞會返回相應的DML操作的布爾值,
如果為TRUE,則表示執行了相應的 INSERT、UPDATE、DELETE操作。
?
eg:
create or replace trigger tr_emp_test before insert or update or delete ON employee referencing old as old_name new as new_name for each row when(new_name.emp_name > old_name.emp_name) DECLAREv_sal number; beginif deleting thennull;end if; end;?
轉載于:https://www.cnblogs.com/ly01/p/8622387.html
總結
- 上一篇: java学习记录--ThreadLoca
- 下一篇: 装饰器带参数