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