語法規則:
create [or replace] trigger [模式.]觸發器名
before| after insert|delete|(update of 列名)
on 表名
[for each row]
when 條件
pl/sql塊
說明:
for each row的意義是:在一次操作表的語句中,每操作成功一行就會觸發一次;不寫的話,表示是表級觸發器,則無論操作多少行,都只觸發一次;
when條件的出現說明了,在dml操作的時候也許一定會觸發觸發器,但是觸發器不一定會做實際的工作,比如when 後的條件不為真的時候,觸發器只是簡單地跳過了pl/sql塊;
例子:
sql **
create
orreplace
trigger
wf_tri_user_list before
insert
orupdate
ordelete
onuser_list
foreach row
declare
uid varchar2(10); useq varchar2(10); asql varchar2(200); namea varchar2(200); nameb varchar2(200);
begin
namea:=
null
;
nameb:=
null
;
if inserting
then
insert
into
wflow.bpm_org_user(userid,username,diaplayname,seq)
values
(:new.user_id,:new.user_name,:new.user_realname,:new.user_id);
dbms_output.put_line('
insert
trigger
ischufale .....');
endif;
if updating
then
if (:new.user_name<>:old.user_name)
and(:new.user_realname<>:old.user_realname)
then
namea:=:new.user_name;
nameb:=:new.user_realname;
asql:='
update
wflow.bpm_org_user
setdiaplayname=:1
where
username=:2';
execute
immediate asql using namea,nameb;
else
if :new.user_name<>:old.user_name
then
namea:=:new.user_name;
asql:='
update
wflow.bpm_org_user
setuser_name=:1
where
username=:2';
execute
immediate asql using namea;
else
if :new.user_realname<>:old.user_realname
then
nameb:=:new.user_realname;
asql:='
update
wflow.bpm_org_user
setdiaplayname=:1
where
username=:2';
execute
immediate asql using nameb,:old.user_id;
endif;
endif;
endif;
endif;
if deleting
then
update
wflow.bpm_org_jobusers
setuserid = 0
where
:old.user_id =userid
andparentid=-1;
delete
from
wflow.bpm_org_jobusers
where
userid = :old.user_id;
delete
wflow.bpm_org_user
where
userid=:old.user_id;
endif;
commit
;
end;
關鍵字:
:new 和:old使用方法和意義,new 只出現在insert和update時,old只出現在update和delete時。在insert時new表示新插入的行資料,update時new表示要替換的新資料、old表示要被更改的原來的資料行,delete時old表示要被刪除的資料。
注意:
在觸發器中不能使用commit。
oracle觸發器使用
size medium 語法規則 create or replace trigger 模式.觸發器名 before after insert delete update of 列名 on 表名 for each row when 條件 pl sql塊 說明 for each row的意義是 在一次操...
oracle觸發器使用案例
開發要求 刪除或者更新表tab的行時,更新表cust相應的字段。表tab中custguid欄位和表cust中cust guid欄位是關聯字段,表tab中com欄位和表cust中str欄位是關聯字段。建立表tab,表cust create table tab custguid varchar2 30 ...
oracle觸發器使用例項
在使用觸發器前先理解兩個概念 new和 old,new代表執行更新操作之後的新錶,old代表執行更新操作之前的舊表。通過這兩張表的使用,可以訪問到觸發器執行前後表資料的變化。insert操作只有 new,delete操作只有 old,update操作二者皆有。new 和 old只用於行級觸發器。ne...