oracle觸發器例項

2021-04-22 09:39:59 字數 3183 閱讀 5126

觸發器定義:觸發器是特定事件出現的時候,自動執行的**塊。

類似於儲存過程

,但是使用者不能直接呼叫他們。

觸發器功能:

1、答應

/限制對錶的修改;

2、自動生成派生列,比如自增字段;

3、強制資料一致性;

4、提供審計和日誌記錄;

5、防止無效的事務處理;

6、啟用複雜的業務邏輯。

觸發器的組成部分:

1、觸發器名稱;

2、 觸發語句;

3、觸發器限制;

4、 觸發操作。

觸發器型別:

1、語句觸發器;

2、 行觸發器;3、

instead of

觸發器;

4、 系統條件觸發器;

5、使用者事件觸發器。

觸發器中

new和

old預設值如下:

data operation             old value                             new value

insert                           null                          inserted value

update                    value before update              value after update

delete                    value before delete                null

例項---行觸發器

create or replace trigger tri_em_branch

after insert or update or delete

--after

在資料庫動作之後觸發器執行

;insert,update,delete

在插入,修改,

刪除後觸發器執行。

on em_branch --

資料庫觸發器所在的表

for each row --

對錶的每一行觸發器執行一次。 /*

將組別資料寫入生管組別檔*/

declare

--變數宣告

v_fact_noem_branch.fact_no%type;

v_sec_noem_branch.branch_no%type;

v_sec_nameem_branch.branch_nm%type;

v_dept_noem_branch.dept_no%type;

v_floor_noem_branch.floor_no%type;

v_fact_no_dem_pri_fact_d.pri_fact_no%type ;

v_if_flagem_branch.if_flag%type;

begin

if updating or deleting then

v_fact_no:=:old.fact_no;

v_sec_no:=:old.branch_no;

v_if_flag:=:old.if_flag;

end if;

if updating or inserting then

v_fact_no:=:new.fact_no;

v_sec_no:=:new.branch_no;

v_sec_name:=:new.branch_nm;

v_dept_no:=:new.dept_no;

v_floor_no:=:new.floor_no;

v_if_flag:=:new.if_flag;

if substr(v_sec_no,1,1) = 'a' then

v_fact_no_d := '0213';

else

if substr(v_sec_no,1,1) = 'c' then

v_fact_no_d := '0215' ;

else

v_fact_no_d := '0214' ;

end if;

end if ;

end if;

if updating then

update sg_pro_sec@lkerp_43

set sec_name = v_sec_name,

dept_no = v_dept_no,

floor_no = v_floor_no,

if_flag = v_if_flag

where fact_no = v_fact_no

and sec_no = v_sec_no;

update em_pri_fact_d

set branch_nm = v_sec_name,

if_flag = v_if_flag

where fact_no = v_fact_no

and branch_no = v_sec_no ;

update em_pnl

set if_flag = v_if_flag

where fact_no = v_fact_no and branch_no = v_sec_no;

end if ;

if inserting then

insert into em_pri_fact_d(fact_no,pri_fact_no,branch_no,branch_nm,if_flag)

values(v_fact_no,v_fact_no_d,v_sec_no,v_sec_name,v_if_flag) ;

insert into sg_pro_sec@lkerp_43(fact_no,sec_no,sec_name,dept_no,floor_no,if_flag)

values(v_fact_no,v_sec_no,v_sec_name,v_dept_no,v_floor_no,v_if_flag);

end if;

if deleting then

delete from sg_pro_sec@lkerp_43 where fact_no = v_fact_no and sec_no = v_sec_no;

delete from em_pri_fact_d where fact_no = v_fact_no and branch_no = v_sec_no;

end if;

end em_branch;

Oracle 觸發器例項

1。先建立emp audit表 create table emp audit information varchar2 50 update today date 2。如果沒有emp表,請建立emp表 create table emp empno number 4 primary key,ename ...

oracle 觸發器簡單例項

語法格式 create or replace trigger 觸發器名字 before after insert delete update 這個不能寫select on 表 在那張表建立觸發器 for each row 行觸發器 declare 申明 變數申明塊 begin 執行語句塊 end 條...

觸發器例項

sql server 觸發器例項 基本語法 幫助裡的語法太長了 create trigger triggername on tablename for insert delete update as 觸發器要執行的操作語句.go注意 觸發器中不允許以下 transact sql 語句 alter d...