Oracle 觸發器
觸發器分類:
DML觸發器: 創建在表上,由DML事件觸發
DDL觸發器: 數據庫對象創建與修改時觸發
instead of觸發器: 創建在視圖上并且只能在行級上觸發,用于替代insert,delete等操作
數據庫系統事件觸發: 定義在數據庫或者模式上,由數據庫事件觸發
觸發器組成:
觸發事件: DML語句(insert/update/delete語句對表/視圖的操作)、DDL語句(create/alter/drop語句對對象進行操作)、數據庫系統事件
觸發時間: 觸發器在觸發事件之前(before)還是之后(after)
觸發操作: 觸發后要做的操作
觸發對象: 表、視圖、模式、數據庫
觸發條件: 由where 子句指定邏輯表達式,只有當表達式值為 TRUE 時,才會觸發操作
觸發頻率: 即語句級(statement)觸發器和行級(row)觸發器
語法&說明:
1)說明
不同類型的觸發器如DML觸發器,intsert of 觸發器,DDL觸發器語法格式存在差別
create [or replace] trigger 觸發器名稱 觸發時間 觸發時間
on 表名/視圖
[for each row] -- 加上 for each row 即為行級觸發器,不加時為語句觸發器,建議添加
begin
pl/sql
end;
2)注意事項
在觸發器執行部分只能使用DML語句(insert/update/delete/select),不能使用DDL(create/drop/alter)操作
觸發器中不能使用commit,觸發器操作與觸發事件一起 commit和bollback
表上觸發器多的話,對dml操作性能影響越大
觸發器最大為32K
3)謂詞
在觸發多個事件時insert/update/delete 為了區分觸發事件
inserting
updating
deletingg
觸發器管理:
-- 禁用觸發器 alter trigger 觸發器名稱 disable; -- 啟用觸發器 alter trigger 觸發器名稱 enable; -- 編譯觸發器 alter trigger 觸發器名稱 compile; -- 刪除觸發器 drop trigger 觸發器名稱:
DML觸發器示例:
CREATE OR REPLACE TRIGGER WW.SAMPLE_GRAPH_TRI after update OR delete ON WW.SAMPLE for each row begin if updating then insert into WW.SAMPLE_HIS(trg_type,id,name) values('update',:old.id,:old.name) elsif deleting then insert WW.SAMPLE_HIS(trg_type,id,name) values('delete',:old.id,:old.name) elsif inserting then insert WW.SAMPLE_HIS(trg_type,id,name) values('insert',:old.id,:old.name) end if; exception when case_not_found then dbms_output.put_line('case error'); when others then dbms_output.put_line(sqlcode ||':'||sqlerrm); end;

浙公網安備 33010602011771號