觸發器

一 Oracle觸發器語法sql

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

  功能:ide

  一、 容許/限制對錶的修改學習

  二、 自動生成派生列,好比自增字段.net

  三、 強制數據一致性日誌

  四、 提供審計和日誌記錄對象

  五、 防止無效的事務處理blog

  六、 啓用複雜的業務邏輯事件

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

  一、觸發器的語法:

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

  ON表名

  [FOR EACH ROW]

  BEGIN

  pl/sql語句

  END

  其中:

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

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

  觸發時間:指明觸發器什麼時候執行,該值可取:

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

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

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

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

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

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

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

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

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

  二、舉例:

  下面的觸發器在更新表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

相關文章
相關標籤/搜索