oracle觸發器使用

2021-08-31 17:26:36 字數 2233 閱讀 8702

[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...