你是否了解Oracle觸發(fā)器
本人很喜歡Oracle,在工作中也很喜歡總結關于Oracle觸發(fā)器的經(jīng)驗教訓,下面就這個問題來詳細說說吧。Oracle觸發(fā)器有兩種after和before,區(qū)別在于每次提交事務觸發(fā)一次和每一行數(shù)據(jù)的更新都觸發(fā)一次,使用時候要注意,以免達不到目的
Oracle產(chǎn)生數(shù)據(jù)庫觸發(fā)器的語法為:
create [or replace] trigger 觸發(fā)器名 觸發(fā)時間 觸發(fā)事件
on 表名
[for each row]
pl/sql 語句
其中:Oracle觸發(fā)器名:觸發(fā)器對象的名稱。由于觸發(fā)器是數(shù)據(jù)庫自動執(zhí)行的,因此該名稱只是一個名稱,沒有實質的用途。
Oracle觸發(fā)時間:指明觸發(fā)器何時執(zhí)行,該值可取:
before---表示在數(shù)據(jù)庫動作之前觸發(fā)器執(zhí)行;
after---表示在數(shù)據(jù)庫動作之后出發(fā)器執(zhí)行。
Oracle觸發(fā)事件:指明哪些數(shù)據(jù)庫動作會觸發(fā)此觸發(fā)器:
insert:數(shù)據(jù)庫插入會觸發(fā)此觸發(fā)器;
update:數(shù)據(jù)庫修改會觸發(fā)此觸發(fā)器;
delete:數(shù)據(jù)庫刪除會觸發(fā)此觸發(fā)器。
表 名:數(shù)據(jù)庫觸發(fā)器所在的表。
for each row:對表的每一行觸發(fā)器執(zhí)行一次。如果沒有這一選項,則只對整個表執(zhí)行一次。
舉例:下面的觸發(fā)器在更新表auths之前觸發(fā),目的是不允許在
周末修改表:
- create trigger auth_secure
- before insert or update or delete
- //對整表更新前觸發(fā)
- on auths
- begin
- if(to_char(sysdate,'DY')='SUN'
- RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');
- end if;
- end
【編輯推薦】