觸發器 TRIGGER
一向百毒不侵的我竟然在這個關節眼上感冒了,腦袋也昏昏的,一迷糊就不知道在想什麼,賊難受,咳咳咳咳.
今天介紹一下,oralce 資料庫中的另一個基本對象–觸發器,如果你瞭解了儲存函數和預存程序,那麼瞭解觸發器就特別簡單了,因為本身觸發器也是一塊pl/sql程式塊,有定義,有聲明,有執行等等,然而和儲存函數或過程不同的是:過程和函數是需要外界調用,或主動調用才能執行的,而觸發器則是觸發器是有一個事件來啟動和啟動並執行,也就是當事件發生時,隱式的觸發執行的,且觸發器不能接受參數。
oracle事件包括 對錶的 insert update delete 以及對視圖的相應操作。該篇主要介紹關於dml觸發器,其他的替代觸發器和系統觸發器,有需要的可以去瞭解。
觸發器4個基本組成:
(1)觸發事件:即在什麼事件發生時觸發,常見事件如 insert ,update,delete;
(2)觸發時間:這裡的時間是相對於事件發生前後來說的,可以定義在事件發生之前和事件發生之後 before | after
(3)觸發器本身:這是關鍵,也就是我們為什麼要建立這個觸發器,要用它做什麼,觸發器的主體,一段pl/sql程式塊
(4)觸發器頻率:說明觸發器內,在事件發生時,觸發的頻率,常見有語句級觸發器和行級觸發器,語句級就是該條語句執行一次,觸發器觸發一次,而行級觸發器則是每操作一行就執行一次觸發器,定義時需要添加(for each row)
基本格式:
CREATE [OR REPLACE] TRIGGER trigger_name
{before | after}
{insert | update | delete}
on table_name
[for each row]
[where condition]
begin
執行體
end;
直接看兩個樣本吧
//在每刪除員工表的一條記錄時就將要刪除的資料,拷貝到員工刪除表中;create table delempasselect * from emplooyees where 1=2;------------------------------------------------create or replace trigger copy_tribefore //刪除之前觸發delete on employeesfor each row //刪除每一行資料都觸發begin insert into delemp(employee_id,last_name,salary) values(:old.employee_id,:old.last_name,:old.salary);end;//這裡提一下關於:old ,和:new:old 代表修飾符訪問操作完成前的值;:new 代表修飾符訪問操作完成後的值。
當刪除表和視圖時,該表所對應的觸發器也會刪除,我們也可以使用語句
drop trigger trigger_name;
後續完善,頭疼的厲害。。。