一、觸發器簡介
? 什么是觸發器(trigger)
? 觸發器在資料庫里以獨立的物件存盤,由資料庫產生某一類事件而啟動運行,即觸發器是當某個事件發生時自動地隱式運行,
? 觸發器的特點
? 由特定事件觸發,外部無法呼叫,
? 觸發器無引數,
? 一個表上最多可有12個觸發器,
? 觸發器的作用
? 常用來完成由資料庫的完整性約束難以完成的復雜業務規則的約束,或用來監視對資料庫的各種操作,實作審計的功能,
二、觸發器分類
1)DML觸發器
? Oracle可以在執行DML陳述句時運行觸發,同時可以指定在DML操作前或操作后進行觸發,指定對每個行或陳述句操作上進行觸發,
2)替代觸發器
? 由于在Oracle里,不能直接對由兩個以上的表建立的視圖進行操作,所以給出了替代觸發器,Oracle專門為進行視圖操作的一種處理方法,
3)系統觸發器
? Oracle提供了第三種型別的觸發器叫系統觸發器,它可以在Oracle資料庫系統的事件中進行觸發,如Oracle系統的啟動與關閉等,
三、DML觸發器
3.1、DML觸發器闡述
? 也就是在對表進行insert/delete/update操作時會執行的觸發器,
3.2、DML觸發器語法
CREATE [OR REPLACE] TRIGGER 觸發器名稱
{BEFORE|AFTER}
{INSERT|DELETE|UPDATE[ OF COLUMN1|COLUMN2……]}
ON {[SCHEMA.]表名|{[SCHEMA.]視圖名}
[FOR EACH ROW]
[WHEN 條件運算式]
BEGIN
[陳述句塊]
END;
3.3、DML觸發器實體
? 增加一個測驗記錄表,將增刪改的記錄插入到此表中,
CREATE TABLE "SYSTEM"."EMP_HIS" ( "EMPNO" VARCHAR2(10 BYTE) NOT NULL ENABLE, "ENAME" VARCHAR2(20 BYTE) NOT NULL ENABLE, "SAL" NUMBER(8, 2), "COMM" NUMBER(8, 2), "REM" VARCHAR2(20 BYTE) ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT ) TABLESPACE "SYSTEM";
1)增加記錄
create or replace trigger triEmpForInsert after insert on emp for each row begin insert into emp_his (empno,ename,sal,comm,rem) values (:new.empno,:new.ename,:new.sal,:new.comm,'增加后'); end;
2)洗掉記錄
create or replace trigger triEmpForDelete before delete on emp for each row begin insert into emp_his (empno,ename,sal,comm,rem) values (:old.empno,:old.ename,:old.sal,:old.comm,'洗掉前'); end;
3)修改記錄
create or replace trigger triEmpForUpdate after update on emp for each row begin insert into emp_his (empno,ename,sal,comm,rem) values (:old.empno,:old.ename,:old.sal,:old.comm,'更新前'); insert into emp_his (empno,ename,sal,comm,rem) values (:new.empno,:new.ename,:new.sal,:new.comm,'更新后'); end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/499136.html
標籤:Oracle
