Oracle中的觸發器,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];