觸發器是特定事件出現的時候,自動執行的**塊。類似於儲存過程,但是使用者不能直接呼叫他們。
功能:1、 允許/限制對錶的修改
2、 自動生成派生列,比如自增字段
3、 強制資料一致性
4、 提供審計和日誌記錄
5、 防止無效的事務處理
6、 啟用複雜的業務邏輯
開始
create trigger biufer_employees_department_id before insert or update of department_id on employees referencing old as old_value new as new_value for each row when (new_value.department_id<>80 ) begin :new_value.commission_pct :=0; end; /觸發器的組成部分:
1、 觸發器名稱
2、 觸發語句
3、 觸發器限制
4、 觸發操作
1、 觸發器名稱
create trigger biufer_employees_department_id命名習慣:
biufer(before insert update for each row)employees 表名
department_id 列名
2、 觸發語句
比如:表或檢視上的dml語句
ddl語句
資料庫關閉或啟動,startup shutdown 等等
when (new_value.department_id<>80 )說明:1、 無論是否規定了department_id ,對employees表進行insert的時候
2、 對employees表的department_id列進行update的時候
3、 觸發器限制
when (new_value.department_id<>80 )限制不是必須的。此例表示如果列department_id不等於80的時候,觸發器就會執行。
其中的new_value是代表更新之後的值。
4、 觸發操作
是觸發器的主體
begin:new_value.commission_pct :=0;
end;
主體很簡單,就是將更新後的commission_pct列置為0
觸發:
insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )
values( 12345,』chen』,』donny』, sysdate, 12,
『[email protected]』,60,10000,.25);
select commission_pct from employees where employee_id=12345;
觸發器不會通知使用者,便改變了使用者的輸入值。
觸發器型別:
1、 語句觸發器
2、 行觸發器
3、 instead of 觸發器
4、 系統條件觸發器
5、 使用者事件觸發器
1、 語句觸發器
是在表上或者某些情況下的檢視上執行的特定語句或者語句組上的觸發器。能夠與insert、update、 delete或者組合上進行關聯。但是無論使用什麼樣的組合,各個語句觸發器都只會針對指定語句啟用一次。比如,無論update多少行,也只會呼叫一次 update語句觸發器。
例子:需要對在表上進行dml操作的使用者進行安全檢查,看是否具有合適的特權。
以下是引用片段:
即使sys,system使用者也不能修改foo表
[試驗]
對修改表的時間、人物進行日誌記錄。
1、 建立試驗表
create table employees_copy as select *from hr.employees
2、 建立日誌表
create table employees_log(who varchar2(30),
when date);
3、 在employees_copy表上建立語句觸發器,在觸發器中填充employees_log 表。
create or replace trigger biud_employee_copy before insert or update or delete on employees_copy begin insert into employees_log( who,when) values( user, sysdate); end; /4、 測試
update employees_copy set salary= salary*1.1;select *from employess_log;
5、 確定是哪個語句起作用?
即是insert/update/delete中的哪乙個觸發了觸發器?
可以在觸發器中使用inserting / updating / deleting 條件謂詞,作判斷:
begin if inserting then ----- elsif updating then ----- elsif deleting then ------ end if; end; if updating(『col1』) or updating(『col2』) then ------ end if;[試驗]
1、 修改日誌表
alter table employees_logadd (action varchar2(20));
2、 修改觸發器,以便記錄語句型別。
以下是引用片段:
建立觸發器
視覺化資料庫工具 對於 microsoft sql server 資料庫,可以在 transact sql 中編寫觸發器,而對於 oracle 資料庫,則可以在 pl sql 中進行編寫。通過指定下列內容建立觸發器 建立觸發器 在 伺服器資源管理器 中,展開 表 資料夾。右擊要在其上建立觸發器的表名...
建立觸發器
create trigger trigger insert test1 on test2 after insert asbegin set nocount on added to prevent extra result sets from interfering with select state...
建立觸發器
create or replace trigger tg student after insert or update or delete on student foreach row declare 定義變數 begin 記錄日誌的程式 操作型別 case when inserting then ...