oracle 数据库 触发器 trigger 语法
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。
總結(jié)
以上是生活随笔為你收集整理的oracle 数据库 触发器 trigger 语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CA AutoSys Workload
- 下一篇: Excel 中使用数据透视表 Pivot