oracle觸發器使用筆記
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 條件
PL/SQL塊
說明:
For each row的意義是:在一次操作表的語句中,每操作成功一行就會觸發一次;不寫的話,表示是表級觸發器,則無論操作多少行,都只觸發一次;
When條件的出現說明了,在DML操作的時候也許一定會觸發觸發器,但是觸發器不一定會做實際的工作,比如when 後的條件不為真的時候,觸發器只是簡單地跳過了PL/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。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-1442602/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 觸發器學習筆記觸發器筆記
- Oracle 觸發器中使用遊標Oracle觸發器
- Oracle觸發器Oracle觸發器
- Oracle觸發器觸發級別Oracle觸發器
- Oracle Instead of 觸發器的使用Oracle觸發器
- oracle使用觸發器監控哪使用者刪除了表記錄Oracle觸發器
- ORACLE DDL觸發器Oracle觸發器
- Oracle之觸發器Oracle觸發器
- oracle ddl 觸發器Oracle觸發器
- Oracle觸發器6(建立系統事件觸發器)Oracle觸發器事件
- 根據業務寫觸發器(oracle觸發器片)觸發器Oracle
- MySQL使用觸發器MySql觸發器
- ORACLE觸發器詳解Oracle觸發器
- Oracle登陸觸發器Oracle觸發器
- oracle 觸發器-表同步Oracle觸發器
- Oracle 登入觸發器Oracle觸發器
- oracle 觸發器 client 事件Oracle觸發器client事件
- Oracle開發基礎-觸發器Oracle觸發器
- oracle 批量刪除觸發器Oracle觸發器
- oracle 觸發器的例項Oracle觸發器
- Oracle 觸發器 限制DDL操作Oracle觸發器
- MySQL學習筆記--觸發器的建立與刪除及使用注意事項MySql筆記觸發器
- 通過oracle觸發器記錄修改某表的使用者和ip地址Oracle觸發器
- Oracle觸發器詳細介紹Oracle觸發器
- Oracle使用觸發器實現ID自增的問題Oracle觸發器
- 25. 使用MySQL之使用觸發器MySql觸發器
- oracle實驗記錄 (CKPT的觸發)Oracle
- oracle儲存過程和觸發器Oracle儲存過程觸發器
- Oracle中觸發器的應用 (zt)Oracle觸發器
- oracle觸發器~ 更新多表的問題Oracle觸發器
- oracle trigger觸發器這servererrorOracle觸發器ServerError
- SqlServer觸發器的建立與使用SQLServer觸發器
- MySQL觸發器的使用規則MySql觸發器
- Oracle資料庫DDL審計觸發器觸發的bug問題Oracle資料庫觸發器
- 【筆記】oracle 優化器筆記Oracle優化
- ORACLE 觸發器控制使用者登入之許可權限制Oracle觸發器
- oracle觸發器執行使用者和v$session的查詢Oracle觸發器Session
- Oracle 跨使用者表間資料操作(觸發器實現)Oracle觸發器