日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

oracle 数据库 触发器 trigger 语法

發(fā)布時(shí)間:2024/4/17 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 数据库 触发器 trigger 语法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://shixm.iteye.com/blog/401564

關(guān)鍵字: oracle 數(shù)據(jù)庫 觸發(fā)器 trigger 語法
語法規(guī)則:
Create [or replace] trigger [模式.]觸發(fā)器名
?????? Before| after?? insert|delete|(update of 列名)

On 表名

[for each row]

When 條件

PL/SQL塊

說明:

For each row的意義是:在一次操作表的語句中,每操作成功一行就會(huì)觸發(fā)一次;不寫的話,表示是表級(jí)觸發(fā)器,則無論操作多少行,都只觸發(fā)一次;

When條件的出現(xiàn)說明了,在DML操作的時(shí)候也許一定會(huì)觸發(fā)觸發(fā)器,但是觸發(fā)器不一定會(huì)做實(shí)際的工作,比如when 后的條件不為真的時(shí)候,觸發(fā)器只是簡單地跳過了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;???
??


關(guān)鍵字:

:NEW 和:OLD使用方法和意義,new 只出現(xiàn)在insert和update時(shí),old只出現(xiàn)在update和delete時(shí)。在insert時(shí)new表示新插入的行數(shù)據(jù),update時(shí)new表示要替換的新數(shù)據(jù)、old表示要被更改的原來的數(shù)據(jù)行,delete時(shí)old表示要被刪除的數(shù)據(jù)。

注意:

在觸發(fā)器中不能使用commit。

與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的oracle 数据库 触发器 trigger 语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。