Oracle數據庫 -- 觸發器

什麼是觸發器?

觸發器是一個特殊的存儲過程
數據庫觸發器是一個與表相關聯的、存儲的PL/SQL程序。
觸發器的作用:每當一個特定的數據操作語句(insert、update、delete)在指定的表上發出時,Oracle自動地執行觸發器中定義的語句序列

第一個觸發器:每當成功插入新員工後,自動打印“成功插入新員工”
觸發器(trigger)
如何創建觸發器:
create tigger saynewemp
after insert
on emp
declare
begin
dbms_output.putline(‘成功插入新員工’);
end;
/

觸發器的應用場景:
1.複雜的安全性檢查
2.數據確認
3.實現審計功能
4.完成數據的備份和同步

創建觸發器的語法

CREATE [or REPLACE]TRIGGER 觸發器名
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE [OF列名]}
ON 表名
[FOR EACH ROW[WHERE(條件)]]
PLSQL塊

觸發器的類型

語句級觸發器:在指定的操作語句操作之前或之後執行一次,不管這條語句影響了多少行。(針對表)
行級觸發器:觸發語句作用的每一條記錄都被觸發。在行級觸發器中使用:old和:new僞記錄變量,識別值的狀態。(針對行)
語句中有FOR EACH ROW這句指的就是行級觸發器

觸發器的應用場景一:複雜的安全性檢查

禁止在非工作時間插入數據
–觸發器應用場景1:實施複雜的安全性檢查
–禁止在非工作時間插入新員工
–觸發器應用場景1:實施複雜的安全性檢查
–禁止在非工作時間插入新員工
/*
1.週末:to_char(sysdate,’day’) in (‘星期六’,’ 星期天’)
2.上班前,下班後:to_number(to_char(sysdate,’hh24’)) not between 9 and 18
*/
create or replace trigger securityemp
before insert
on tmp
begin
if to_char(sysdate,’day’) in (‘星期六’,’ 星期天’) or
to_number(to_char(sysdate,’hh24’)) not between 9 and 18 then
–禁止insert新員工
raise_application_error(-20001,’禁止在非工作時間插入新員工’)
end if
end;
/

觸發器的應用場景二:數據的確認

/*
觸發器應用場景二:數據的確認
漲後的薪水不能少於漲前的薪水

:old和:new 代表同一條記錄
:old 表示操作該行之前,這一行的值
:new 表示操作改行之後,這一行的值
*/
create or replace trigger checksalary
before update
on tmp
for each row
begin
if :new.gongzi < :old.gongzi then

raise_application_error(-20002,’漲後的薪水不能少於漲前的薪水,漲後的薪水:’||:new.gongzi||’ 漲前的薪水:’||:old.gongzi);
end if;
end;
/

觸發器的應用場景三:數據庫的審計

/*
觸發器應用三:數據庫的審計—->基於值的審計功能
給員工漲工資,當漲後的薪水超過6000塊錢時候,審計員工的信息
*/
–創建表,用於保存審計信息
create table audit_info
(
information varchar2(200)
);

create or replace trigger do_audit_tmp_salary
after update
on tmp
for each row
begin
–當漲後的薪水大於6000,插入審計信息
if :new.gongzi > 6000 then
insert into audit_info values(:new.tmpid||’ ‘||:new.tname||’ ‘||:new.gongzi);
end if ;
end;

觸發器的應用場景四:數據的備份和同步

/*
觸發器應用場景四:數據的備份和同步
當給員工漲完工資後,自動備份新的工資到備份表中
*/
create or replace trigger sync_salary
after update
on tmp
for each row
begin
–當主表更新後,自動更新備份表
update emp_back set gongzi = :new.gongzi where tmpid = :new.tmpid;
end;
/

發佈了24 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章