Oracle觸發器詳解

2021-09-01 21:03:55 字數 2636 閱讀 3447

觸發器是特定事件出現的時候,自動執行的**塊。類似於儲存過程,觸發器與儲存過程的區別在於:儲存過程是由使用者或應用程式顯式呼叫的,而觸發器是不能被直接呼叫的。

1.觸發器組成: 

觸發事件:引起觸發器被觸發的事件。

例如:dml

語句(insert, update, delete

語句對錶或檢視執行資料處理操作)、

ddl語句(如

create

、alter

、drop

語句在資料庫中建立、修改、刪除模式物件)、資料庫系統事件(如系統啟動或退出、異常錯誤)、使用者事件(如登入或退出資料庫)。

trigger

是在觸發事件發生之前(

before

)還是之後

(after)

觸發,也就是觸發事件和該

trigger

的操作順序。

觸發操作:即該

trigger

被觸發之後的目的和意圖,正是觸發器本身要做的事情。

例如:pl/sql

塊。觸發物件:包括表、檢視、模式、資料庫。只有在這些物件上發生了符合觸發條件的觸發事件,才會執行觸發操作。

觸發條件:由

when

子句指定乙個邏輯表示式。只有當該表示式的值為

true

時,遇到觸發事件才會自動執行觸發器,使其執行觸發操作。

觸發頻率:說明觸發器內定義的動作被執行的次數。即語句級

(statement)

觸發器和行級

(row)

觸發器。

2.觸發器的型別:

語句級(statement)

觸發器:是指當某觸發事件發生時,該觸發器只執行一次;

行級(row)

觸發器:是指當某觸發事件發生時,對受到該操作影響的每一行資料,觸發器都單獨執行一次。

dml觸發器:oracle可以在dml語句進行觸發,可以在dml操作前或操作後進行觸發,並且可以對每個行或語句操作上進行觸發。

替代觸發器:由於在oracle裡,不能直接對由兩個以上的表建立的檢視進行操作。所以給出了替代觸發器。它就是oracle 8專門為進行檢視操作的一種處理方法。

系統觸發器:oracle 8i提供了第三種型別的觸發器叫系統觸發器。它可以在oracle資料庫系統的事件中進行觸發,如oracle系統的啟動與關閉等。

3.建立觸發器的一般語法:

create [or replace] trigger trigger_name

[or ...]

on [schema.]table_name | [schema.]view_name 

[referencing ]

[for each row ]

[when condition]

pl/sql_block | call procedure_name;

referencing 子句說明相關名稱,在行觸發器的pl/sql塊和when 子句中可以使用相關名稱參照當前的新、舊列值,預設的相關名稱分別為old和new。觸發器的pl/sql塊中應用相關名稱時,必須在它們之前加冒號(:),但在when子句中則不能加冒號。不同型別的觸發器(如

dml觸發器、

instead of

觸發器、系統觸發器

)的語法格式和作用有較大區別。

4.dml觸發器示例

:限定只對部門號為80的記錄進行行觸發器操作

create

orreplace

trigger

tr_emp_sal_comm

before 

update

ofsalary, commission_pct

ordelete

onhr.employees

foreach row

when

(old.department_id 

=80

)begin

case

when

updating (

'salary'

) then

if:new.salary 

<

:old.salary 

then

-20001, '部門

80的人員的工資不能降');

endif

;when

updating (

'commission_pct'

) then

if:new.commission_pct 

<

:old.commission_pct 

then

-20002, '部門

80的人員的獎金不能降');

endif

;when

deleting 

then

-20003

'不能刪除部門

80的人員記錄');

oracle觸發器詳解

l 資料庫觸發器是乙個與表相關聯的 儲存的 pl sql 程式。每當乙個特定的資料操作語句 insert,update,delete 在指定的表上發出時,oracle 自動地執行觸發器中定義的語句序列。l l觸發器的型別 語句級觸發器 在指定的操作語句操作之前或之後執行一次,不管這條語句影響了多少行...

Oracle 觸發器詳解

觸發器 資料庫觸發器是乙個與表相關聯的 儲存的pl sql程式。每當乙個特定的資料操作語句 insert,update,delete 在指定的表上發出時,oracle自動地執行觸發器中定義的語句序列。觸發器的型別 語法 create or replace trigger 觸發器名 delete in...

觸發器詳解

觸發器是乙個特殊的儲存過程,不同的是儲存過程要用call來呼叫,而觸發器不需要使用call 也不需要手工啟動,只要當乙個預定義的事件發生的時候,就會被mysql自動呼叫。建立觸發器 語法如下 create trigger trigger name trigger time trigger event...