觸發器定義:觸發器是特定事件出現的時候,自動執行的**塊。
類似於儲存過程
,但是使用者不能直接呼叫他們。
觸發器功能:
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...