oracle觸發器使用筆記

2022-02-24 21:12:54 字數 2793 閱讀 7921

語法規則:

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