oracle 資料庫 觸發器 trigger 語法

2021-09-12 05:26:27 字數 2271 閱讀 4943

關鍵字: oracle 資料庫 觸發器 trigger 語法

語法規則:

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表示要被刪除的資料。

注意:在觸發器中不能使用commit。

oracle資料庫觸發器

instead of觸發器介紹 instead of觸發器代替觸發動作,並在處理約束之前激發 對於每個觸發操作,每個表或檢視都只能有乙個instead of觸發器。而乙個表對於每個觸發操作可以有多個after觸發器 instead of觸發器的建立模板 create or replace trigg...

Oracle資料庫update觸發器

在專案中使用到oracle資料庫的update觸發器,先記錄下來方便以後查閱。預備知識和格式以後再編輯吧,先把內容貼出來。create or replace trigger demo trigger after update on tb goods referencing new as new ol...

Oracle資料庫觸發器例項

需求 在修改表qdyth.jzfpjcxx時,要實時記錄表中的資料變動情況 協商後結果 建立新錶記錄資料變動情況 實現手段 資料庫觸發器 建立或修改觸發器 tr jzfpjcxx 2 create or replace trigger tr jzfpjcxx 2 觸發條件 before delete...