觸發器

一 Oracle觸發器語法

  觸發器是特定事件出現的時候,自動執行的代碼塊。類似於存儲過程,觸發器與存儲過程的區別在於:存儲過程是由用戶或應用程序顯式調用的,而觸發器是不能被直接調用的。

  功能:

  1、 允許/限制對錶的修改

  2、 自動生成派生列,比如自增字段

  3、 強制數據一致性

  4、 提供審計和日誌記錄

  5、 防止無效的事務處理

  6、 啓用複雜的業務邏輯

  觸發器觸發時間有兩種:after和before。

  1、觸發器的語法:

  CREATE [OR REPLACE] TIGGER觸發器名 觸發時間 觸發事件

  ON表名

  [FOR EACH ROW]

  BEGIN

  pl/sql語句

  END

  其中:

  觸發器名:觸發器對象的名稱。

  由於觸發器是數據庫自動執行的,因此該名稱只是一個名稱,沒有實質的用途。

  觸發時間:指明觸發器何時執行,該值可取:

  before—表示在數據庫動作之前觸發器執行;

  after—表示在數據庫動作之後出發器執行。

  觸發事件:指明哪些數據庫動作會觸發此觸發器:

  insert:數據庫插入會觸發此觸發器;

  Oracle觸發器語法(二)Oracle觸發器詳解

  update:數據庫修改會觸發此觸發器;

  delete:數據庫刪除會觸發此觸發器。

  表 名:數據庫觸發器所在的表。

  for each row:對錶的每一行觸發器執行一次。如果沒有這一選項,則只對整個表執行一次。

  2、舉例:

  下面的觸發器在更新表auths之前觸發,目的是不允許在週末修改表:

  create triggerauth_secure before insert or update or delete //對整表更新前觸發

  on auths

  begin

  if(to_char(sysdate,’DY’)=’SUN’

  RAISE_APPLICATION_ERROR(-20600,’不能在週末修改表auths’);

  end if;

  end

  例子:

  CREATE OR REPLACE TRIGGER CRM.T_SUB_USERINFO_AUR_NAME AFTER UPDATE OF STAFF_NAME

  ON CRM.T_SUB_USERINFO

  REFERENCING OLD AS OLD NEW AS NEW

  FOR EACH ROW

  declare

  begin

  if :NEW.STAFF_NAME!=:OLD.STAFF_NAME then

  begin

  客戶投訴:

  update T_COMPLAINT_MANAGE set SERVE_NAME=:NEW.STAFF_NAME where SERVE_SEED=:OLD.SEED;

  客戶關懷

  update T_CUSTOMER_CARE set EXECUTOR_NAME=:NEW.STAFF_NAME where EXECUTOR_SEED=:OLD.SEED;

  客戶服務

  update T_CUSTOMER_SERVICE set EXECUTOR_NAME=:NEW.STAFF_NAME

  where EXECUTOR_SEED=:OLD.SEED;

  end;

  end if;

  end T_sub_userinfo_aur_name;

深入學習

http://blog.csdn.net/yiwanxinyuefml/article/details/7528304

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章