Oracle中的觸發器
Oracle中的觸發器
觸發器是一種特殊的額存儲過程,它在發生某種數據庫時間時由Oracle系統自動觸發。觸發器通常用於加強數據庫的完整性約束和業務規則等,對於表來說,觸發器可以實現比CHECK約束更為復雜的約束。
Oracle中的觸發器的類型主要有DML觸發器、替代觸發器、系統事件觸發器和DDL觸發器。
觸發器的分類
DML觸發器
DML觸發器由DML語句觸發,例如INSERT、UPDATE和DELETE語句。
針對所有的DML事件,按照觸發器的時間可以將DML觸發器分為BEFORE觸發器和AFTER觸發器,分別表示在DML事件發生之前與之後采取行動。
另外,DML觸發器也可以分為語句級觸發器和行級觸發器,語句級觸發器針對某一條語句觸發一次,而行級觸發器針對語句所影響的每一行都觸發一次。
INSTEAD OF觸發器
INSTEAD OF觸發器(替代觸發器),用於執行一個替代操作來代替觸發事件的操作,例如針對INSERT事件的INSTEAD OF觸發器,它由INSERT語句觸發,當出現INSERT語句時,該語句不會被執行,而是執行INSTEAD OF觸發器中定義的語句。
系統事件觸發器
系統事件觸發器在發生如數據庫啟動或關閉等系統事件時觸發。
DDL觸發器
DDL觸發器由DDL語句觸發,如CREATE、ALTER和DROP語句。DDL觸發器同樣分為BEFORE觸發器與AFTER觸發器。
觸發器的創建
創建觸發器需要使用CREATE TRIGGER語句,其語法如下:
CREATE [OR REPLACE] TRIGGER trigger_name
[BEFORE|AFTER|INSTEAD OF] trigger_event
{ON table_name|view_name|DATABASE}
[FOR EACH ROW]
[ENABLE|DISABLE]
[WHEN trigger_condition]
[DECLARE declaration_statements;]
BEGIN
trigger_body;
END [trigger_name];