觸發器的定義就是說某個條件成立的時候,觸發器裏面所定義的語句就會被自動的執行。因此觸發器不需要人爲的去調用,也不能調用。然後,觸發器的觸發條件其實在你定義的時候就已經設定好了。觸發器可以分爲語句級觸發器和行級觸發器。
1、在一個表中定義的語句級的觸發器,當這個表被刪除時,程序就會自動執行觸發器裏面定義的操作過程。這個就是刪除表的操作就是觸發器執行的條件了。
2、在一個表中定義了行級的觸發器,那當這個表中一行數據發生變化的時候,比如刪除了一行記錄,那觸發器也會被自動執行了。
觸發器的語法:
create [or replace] tigger 觸發器名 觸發時間 觸發事件 on 表名
[for each row]
begin
pl/sql語句
end
其中:
觸發器名:觸發器對象的名稱。由於觸發器是數據庫自動執行的,因此該名稱只是一個名稱,沒有實質的用途。
觸發時間:指明觸發器何時執行,該值可取:
before:表示在數據庫動作之前觸發器執行;
after:表示在數據庫動作之後觸發器執行。
觸發事件:指明哪些數據庫動作會觸發此觸發器:
insert:數據庫插入會觸發此觸發器;
update:數據庫修改會觸發此觸發器;
delete:數據庫刪除會觸發此觸發器。
表 名:數據庫觸發器所在的表。
for each row:對錶的每一行觸發器執行一次。如果沒有這一選項,則只對整個表執行一次。
功能:
1、 允許/限制對錶的修改 2、 自動生成派生列,比如自增字段
3、 強制數據一致性 4、 提供審計和日誌記錄
5、 防止無效的事務處理 6、 啓用複雜的業務邏輯
舉例
觸發器在更新表tb_emp之前觸發,目的是不允許在週末修改表:
create or replace trigger auth_secure before insert or update or DELETE
on tb_emp
begin
IF(to_char(sysdate,'DY')='星期日') THEN
RAISE_APPLICATION_ERROR(-20600,'不能在週末修改表tb_emp');
END IF;
END;