[size=medium]語法規則:
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 or replace trigger wf_tri_user_list before insert or update or delete on user_list
for each 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 is chufale .....');
end if;
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 set diaplayname=: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 set user_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 set diaplayname=:1 where username=:2';
execute immediate asql using nameb,:old.user_id;
end if;
end if;
end if;
end if;
if deleting then
update wflow.bpm_org_jobusers set userid = 0 where :old.user_id =userid and parentid=-1;
delete from wflow.bpm_org_jobusers where userid = :old.user_id;
delete wflow.bpm_org_user where userid=:old.user_id;
end if;
commit;
end;
關鍵字:
:new 和:old使用方法和意義,new 只出現在insert和update時,old只出現在update和delete時。在insert時new表示新插入的行資料,update時new表示要替換的新資料、old表示要被更改的原來的資料行,delete時old表示要被刪除的資料。
[/size]
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...
Oracle的觸發器使用
在oracle中想要插入資料或更新資料時能夠自動更新時間,需要使用使用觸發器,此處使用的工具時plsql 1.建表 create table rm catalog id varchar 64 primary key,name varchar 256 fatherid varchar 64 crate...