Oracle的觸發器

2021-07-03 23:00:27 字數 1680 閱讀 3198

每當乙個特定的數操作語句(insert,update,delete)在指定的表上發出時,oracle自動的執行觸發器中定義的語句序列。這個定義,大家看到就能明白觸發器的作用了,增刪改查,為什麼觸發器沒有查詢呢。因為oracle的觸發器是針對資料變動時所觸發的一種待定行動。比如你刪除了乙個表中的字段,刪除觸發器就會啟動,執行他的命令。同理,修改和增加方法也是一樣。只要你執行了增刪改方法,從而改變了表的資料時,你所設定相應的觸發器就會執行。

例子:每當成功插入新員工後,自動列印一句話「成功插入新員工」;

create trigger saynewemp//建立乙個觸發器 saynewemp是觸發器的名字

after insert//執行插入方法後觸發

on emp//針對是哪個表

declare//宣告

begin//開始

dbms_output.put_line("成功插入新員工")//觸發時列印一句話

end;//結果

乙個員工表的插入觸發器就寫好了。只要我們對員工表執行insert插入操作後,就會執行觸發器中的行為,如上所示,會自動列印一句話。

複雜的安全性檢查

資料的確認

資料庫的審計

資料的備份和同步

第一種:複雜的安全性檢查,就比如我們專案中的需求,如果有週末放假不能對資料庫進行改變,那我們就可以用觸發器對他進行限制

第二種:資料的確認,比如你拿100塊買1塊錢的東西的時候,老闆找錢給你時,你是不是要數一數,確認一下是否有沒有錯呢

第三種:資料庫的審計,他是針對資料庫的操作記錄,可以記錄誰對資料庫進行了什麼操作,oracle已經有自帶的這種功能,我們也可以自己用觸發器實現他

第四種:資料的備份和同步,這個也好理解,就是當你對資料庫進行操作以後,就觸發備份操作,這有點像單機遊戲英雄無敵裡的遊戲儲存一樣,當輪到你操作時,就會自動執

行一次自動儲存。

create[or replace]trigger 觸發器的名字//建立乙個觸發器

//觸發器執行的順序,是方法前還是方法後執行

//給哪個方法設定觸發器,在update方法中,可以用of指明哪一列名

on 表名//哪個表

[for each row[when(條件)]]//如果有for each row,那就是行級觸發器,反之,就是語句觸發器

plsql塊//執行塊

語句級觸發器:在指定的操作語句操作之前或之後執行一次,不管這條語句影響了多少行,只執行一次。

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

是不是很抽象呢,其實大家從名字就可以清楚知道他們的分別。我在下面舉例說明吧。

例子:我們要在把員工表中的乙個字段資料(有三條)插入到新的乙個表中,

insert into emp10 select * from emp where name = 10;
如果是語句級觸發器的話,只觸發一次,因為語句級觸發器:針對的是表,

而行級觸發器,前面也說了,是三條記錄,自然會觸發三次行級觸發器,也就是,針對的是行。就如前面的語法中,行級觸發器for each row 語句,後面也可以加when的條件,可以指定哪一行。

這些是觸發器的介紹。看到這裡,大家就能明白觸發器是什麼,幹什麼用的,在什麼情景下使用了。雖然這篇很基礎,但對於新人還是有些幫助的。

ORACLE觸發器 行級觸發器

行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸發器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例乙個簡單的...

Oracle觸發器介紹 行級觸發器

行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸 髮器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例一 個簡...

Oracle觸發器簡介 建立 使用觸發器

觸發器類似與儲存過程,都是為了實現特殊功能而執行的 塊。觸發器不允許使用者顯示傳遞引數,不能夠返回引數值,不允許使用者呼叫觸發器。觸發器只是在oracle合適的時間自動呼叫,非常類似於面向程式設計中的 觸發器按照觸發事件型別 物件不同分為 語句觸發器,行觸發器,instead of觸發器,系統事件觸...