oracle
中的觸發器
在oracle
中,觸發器是一種特殊的子程式,它在插入、更新、刪除資料時自動執行。使用觸發器可以實現比較複雜的約束。
(pk fk uq ck df
都是單錶約束資料完整性。)
觸發器可以分為
insert
觸發器、
update
觸發器、
delete
觸發器。
insert
觸發器在對錶或檢視執行
insert
語句時觸發,
update
觸發器在對錶或檢視執行
update
操作時執行,
delete
觸發器在對錶或檢視執行
delete
操作時執行。
在觸發器中有兩個變數非常重要,它們是new和old。
new表示新新增的值,
old表示原來的值。
觸發器的語法如下:
create [or replace] trigger
觸發器名稱
1 2
[or ]
on表或檢視名
[refrencing
[new as
別名] [old as
別名]]3
[for each row]4
[when (
條件)]5
[declare
變數宣告]
begin
觸發器主體
[exception
異常處理]
end [
觸發器名稱]
需要解釋的是:
1處表示觸發器是在操作之前還是在之後觸發,舉例若是驗證資料的合法性,可在前驗證後插入。不過
inserted of
是針對檢視來說的對於檢視操作時,觸發器的處理**則替代對檢視的操作
2表示觸發器的型別,表示哪一種觸發器,並且是在操作那一列時觸發的限定條件,操作該列可觸發觸發器。3
refrencing
:觸發器對
insert
,update
,delete
操作時,存在新舊資料的問題,新資料採用
new物件表示,舊資料採用
old物件來表示,在
insert
中,new
表示要插入的資料,此時
old沒有意義。在
delete
中,old
表示已刪除的資料,此時
new沒有意義。在
update
中,new
表示已更新的新資料,
old表示更新前的舊的資料。
new和
old是記錄物件,
refrencing
子句可以對
new和
old指定乙個別名。
4表示是行級觸發器,每次對行操作時,都會觸發觸發器,處理**都會執行。如果沒有,則只觸發一次,處理**只執行一次。
5限制觸發器的條件,表示什麼時候執行觸發器。
另外注意的是,觸發器和觸發語句同在乙個屋簷(事務)下,一起提交執行,一起回滾。
如下例子:
insert
觸發器
createorreplacetriggertrigger_insert
after
insert
ontestss
foreachrow
begin
insertintotesttimevalues(:new.id,:new.names,sysdate);
end;
當向testss中插入資料時,則觸發trigger_insert觸發器,目的是向名稱為testtime的表中插入記錄,記錄操作者名稱和操作時間。其中的:new.id是代表的testss中的id,同樣的:new.names也代表的是testss中的names屬性。sysdate是系統時間。
其他兩個觸發器update和delete觸發器和insert觸發器的使用方法方式基本相同,不在贅述。那麼使用觸發器的好處是什麼呢?個人覺得觸發器就像是機關或者說是地雷,在滿足一些條件的時候,自動的做一些事情,是事情變得簡單易處理。例如銀行的資料庫應該會有很多的觸發器,每一步或每一次的資料庫操作都會觸發觸發器,記錄相應的操作過程或運算元據,會有大量的操作文件,保證資料的安全和完整性。總之,觸發器就是滿足一定的條件之後就去執行一些動作,跟if語句有點像,我們想做些什麼,只要寫好處理語句,再寫好觸發條件就ok了。
ORACLE觸發器 行級觸發器
行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸發器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例乙個簡單的...
Oracle的觸發器
每當乙個特定的數操作語句 insert,update,delete 在指定的表上發出時,oracle自動的執行觸發器中定義的語句序列。這個定義,大家看到就能明白觸發器的作用了,增刪改查,為什麼觸發器沒有查詢呢。因為oracle的觸發器是針對資料變動時所觸發的一種待定行動。比如你刪除了乙個表中的字段,...
oracle 中的觸發器(trigger)
觸發器 2009年02月10日 自動生成資料 強制複雜的完整性約束 自定義複雜的安全許可權 提供審計的日記記錄 啟用發展的業務邏輯 create or replace trigger trigger name or on schema.table or view name referencing n...