Oracle中的DML觸發器

2021-09-26 20:10:16 字數 2932 閱讀 5162

什麼是dml觸發器?

dml觸發器是指基於dml操作所建立的觸發器.

(dml操作:select、update、insert、delete,用來對資料庫裡的資料進行操作)

dml觸發器的作用?

dml觸發器可用於實現資料安全保護、資料審計、資料完整性、參照完整性、資料複製等功能.

dml觸發器型別?

1.語句觸發器

在指定的操作語句之前或之後執行一次,不管這條語句影響了多少行.

2.行觸發器

觸發語句作用的每一條記錄都被觸發,在行級觸發器中使用 :old 和 :new 偽記錄變數,識別值的狀態.

:old 表示操作之前該行的值

:new 表示操作之後該行的值

建立dml觸發器語法:

語句觸發器:

delete from empnew where empno=7788;

create [or replace] trigger trigger_name

on 表名

plsql塊

行觸發器:

delete from empnew where empno=7788;

create [or replace] trigger trigger_name

on 表名

[for each row [when(條件)]]

plsql塊

例項1:實現資料的安全保護功能: 禁止在休息日(周

六、週日)改變emp表資料

create or replace trigger emp_trigger1

before insert or update or delete

on emp

begin

if to_char(sysdate,'day') in ('星期六','星期日') then

end if;

end;

當執行刪除操作時,會自定執行觸發器

例項1屬於語句觸發器.

例項2: 實現資料審計

功能: 審計員工資訊表資料的變化,審計刪除時間,以及被刪除的雇員名.

--建立審計表

create table delete_emp_audit(

name varchar2(10), --員工姓名

delete_time date --刪除時間

);--建立觸發器

create or replace trigger del_emp_tigger

after delete

on emp

for each row

begin

insert into delete_emp_audit values(:old.ename,sysdate);

end;

--測試

delete from emp where empno =7499;

首先建立一張審計表,然後建立觸發器.最後刪除資料觸發已建立的觸發器.

查詢審計表,發現裡面新增了一條刪除的員工姓名和刪除時間.

例項2是乙個行級觸發器.

例項3:實現資料完整性

功能: 要求員工漲後的工資不能低於原來的工資,並且所漲的工資不能超過原工資的50%

create or replace trigger tr_check_sal

before update of sal --of 指定更新sal列時觸發 觸發器

on emp

for each row

when (new.sal < old.sal or new.sal > old.sal * 1.5) --此處new和old不加冒號(:),因為when語句不在qlsql塊內部

begin

end;

當修改員工工資時會觸發這個觸發器

例項3也是行級觸發器

例項4:實現參照完整性

功能: 級聯更新dept表的主鍵列以及emp表的外來鍵列

create or replace trigger upd_cascade_trigger

after update of deptno

on dept

for each row

begin

update emp set deptno = :new.deptno where deptno = :old.deptno;

end;

執行修改dept表中deptno列,會觸發定義的觸發器upd_cascade_trigger,在觸發器中會把emp表對應的deptno欄位進行更新操作.

--測試

update dept set deptno =50 where deptno =10;

查詢一下更新後的員工資訊

以上就是對dml觸發器用法的介紹.

DML觸發器觸發順序

dml觸發器觸發時,dml語句的執行順序 1 語句之前級觸發器 2 行之前級觸發器 3 語句本身 4 行之後級觸發器 5 語句之後級觸發器 例如對錶table new進行更新,使用臨時表記錄觸發器的激發順序,如 所示 語句之前級觸發器 create or replace trigger bstate...

DML觸發器的缺憾

tom說過他希望三樣東西不曾存在 觸發器,自治事務,when others 級聯刪除 級聯修改,在設計良好的系統中是不存在的 即使有,那也是小概率事件,必須專門寫一段指令碼來解決,而不是作為常規功能存在 不得不用觸發器,要麼是原系統模組化做得不夠好,要麼是不允許改動原有的 當然有時候不是不允許,而是...

DDL觸發器與DML觸發器比較

dml觸發器 要防止對資料庫架構進行某些更改。希望資料庫中發生某種情況以響應資料庫架構中的更改。要記錄資料庫架構中的更改或事件。僅在執行觸發 ddl 觸發器的 ddl 語句後,ddl 觸發器才會激發。ddl 觸發器無法作為 instead of 觸發器使用。下面的示例顯示如何使用 ddl 觸發器阻止...