oracle觸發器簡介與使用方法
一,觸發器簡介
觸發器的定義就是說某個條件成立的時候,觸發器裡面所定義的語句就會被自動的執行。因此觸發器不需要人為的去呼叫,也不能呼叫。然後,觸發器的觸發條件其實在你定義的時候就已經設定好了。
二,觸發器的作用
* 對資料庫的操作進行審計,儲存歷史資料
*完成資料庫初始化處理
*控制資料庫的資料完整性
*進行相關資料的修改
*完成資料複製
*自動完成資料庫統計計算
*限制資料庫操作的時間、許可權等,控制實體的安全
三,觸發器的組成
2、觸發事件:什麼SQL語句會引起觸發器觸發(Insert, delete, update)[3]
3、觸發子體:觸發器觸發時要執行的操作(一個完整的PL/SQL程式)
4、觸發型別:觸發器被執行的次數(語句級、行級)[2] //語句級只執行一次,行級會執行多次。
[*]一個表上最多可以建立12個不同型別的觸發器:3*2*2 = 12
四,觸發器語法
create [or replace] tigger 觸發器名 觸發時間 觸發事件 on 表名 [for each row] begin pl/sql語句 end
觸發器名:觸發器物件的名稱。由於觸發器是資料庫自動執行的,因此該名稱只是一個名稱,沒有實質的用途。
觸發時間:指明觸發器何時執行,該值可取:
before:表示在資料庫動作之前觸發器執行;
after:表示在資料庫動作之後觸發器執行。
觸發事件:指明哪些資料庫動作會觸發此觸發器:
insert:資料庫插入會觸發此觸發器;
update:資料庫修改會觸發此觸發器;
delete:資料庫刪除會觸發此觸發器。
表 名:資料庫觸發器所在的表。
for each row:對錶的每一行觸發器執行一次。如果沒有這一選項,則只對整個表執行一次。
五,示例
1) 實現當操縱員工表時自動將員工人數統計到部門表中:
部門表下有三個欄位,分別是部門編碼,部門名稱,總人數
create table dept1(dno int,dname varchar(20),population int);
員工表下有三個欄位,分別是員工編碼,員工名稱,部門編碼
create table emp1(eid int,ename varchar2(20),dno int);
編寫觸發器
SQL> create or replace trigger trigger01
after delete or insert or update on emp1
for each row
begin
if inserting then
update dept1 set population=population+1
where dept1.dno=:new.dno;
elsif deleting then
update dept1 set population=population-1
where dept1.dno=:old.dno;
elsif updating then
update dept1 set population=population+1
where dept1.dno=:new.dno;
update dept1 set population=population-1
where dept1.dno=:old.dno;
end if;
end;
/
((特殊變數: :new :old:new代表你所新輸入的資料
:old代表更改前的資料
使用方式 :old.列名
insert 操作只有 :new
delete 操作只有 :old
update 操作 :new :old 都有)
2)使用觸發器實現序號自增
建立一個序列
create sequence SEQ_TEST
minvalue 1 --最小值
nomaxvalue --不設定最大值
start with 1 --從1開始計數
increment by 1 --每次加1個
nocycle --一直累加,不迴圈
nocache; --不建緩衝區
建立測試表
create table TEST
(
NID int PRIMARY KEY,
test1 varchar2(20)
);
建立觸發器
CREATE OR REPLACE TRIGGER tg_test
BEFORE INSERT ON test
FOR EACH ROW WHEN (new.nid is null)
begin
select seq_test.nextval into:new.nid from dual;
end;
/
插入幾條資料驗證下吧
select * from test;
insert into test(nid,test1) values(4,'aaa'); --手動插入序號
insert into test(test1) values('bbb'); --自動插入序
博主還寫過使用觸發器配置oracle使用者登入資訊日誌功能,可以直接複製在生產庫使用,詳情請點選以下連結
https://blog.csdn.net/zcb_data/article/details/80497414 點選開啟連結