Oracle觸發器
功能: 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 等等 before insert or update of department_id on employees referencing old as old_value new as new_value for each row 說明: 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, ‘donny@hotmail.com’,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操作的使用者進行安全檢查,看是否具有合適的特權。 Create table foo(a number); Create trigger biud_foo Before insert or update or delete On foo Begin If user not in (‘DONNY’) then Raise_application_error(-20001, ‘You don’t have access to modify this table.’); End if; End; / 即使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 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14377/viewspace-912136/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle觸發器觸發級別Oracle觸發器
- ORACLE DDL觸發器Oracle觸發器
- Oracle之觸發器Oracle觸發器
- oracle ddl 觸發器Oracle觸發器
- Oracle觸發器6(建立系統事件觸發器)Oracle觸發器事件
- 根據業務寫觸發器(oracle觸發器片)觸發器Oracle
- ORACLE觸發器詳解Oracle觸發器
- Oracle登陸觸發器Oracle觸發器
- oracle 觸發器-表同步Oracle觸發器
- Oracle 登入觸發器Oracle觸發器
- oracle 觸發器 client 事件Oracle觸發器client事件
- Oracle開發基礎-觸發器Oracle觸發器
- oracle 批量刪除觸發器Oracle觸發器
- oracle 觸發器的例項Oracle觸發器
- Oracle 觸發器 限制DDL操作Oracle觸發器
- Oracle 觸發器中使用遊標Oracle觸發器
- Oracle觸發器詳細介紹Oracle觸發器
- oracle儲存過程和觸發器Oracle儲存過程觸發器
- Oracle中觸發器的應用 (zt)Oracle觸發器
- oracle觸發器~ 更新多表的問題Oracle觸發器
- oracle trigger觸發器這servererrorOracle觸發器ServerError
- Oracle Instead of 觸發器的使用Oracle觸發器
- Oracle資料庫DDL審計觸發器觸發的bug問題Oracle資料庫觸發器
- 禁止oracle表的觸發器triggerOracle觸發器
- ORACLE 觸發器語法及例項 一Oracle觸發器
- ORACLE 觸發器語法及例項 二Oracle觸發器
- ORACLE 觸發器語法及例項 三Oracle觸發器
- oracle 觸發器 和 常用內建程式包Oracle觸發器
- Oracle觸發器死鎖問題解決Oracle觸發器
- 監控oracle的觸發器語句(轉)Oracle觸發器
- mysql——觸發器MySql觸發器
- mysql 觸發器MySql觸發器
- SQL觸發器SQL觸發器
- Mysql觸發器:MySql觸發器
- mysql觸發器MySql觸發器
- 【SQL Server】-- 一觸即發之觸發器SQLServer觸發器
- oracle 觸發器實現禁止在資料庫中建立dblink ---透過觸發器實現Oracle觸發器資料庫
- ORACLE 禁用/啟用外來鍵和觸發器Oracle觸發器