Oracle之觸發器(Trigger)

目錄

  • 闡述
  • 語法
  • 小結

闡述

  • Trigger觸發器。理解起來實際上是很容易的
  • 觸發器,在聲明的條件,通常來講,某個表中的數據特別重要,或是幾個DB之間的數據進行互相引用和聯繫
  • 數據拋送、交互、備份,不少時候都會用到
  • 觸發器又分爲after以前觸發和以後觸發instead of,下面只介紹以後觸發和數據的插入

語法

  • Trigger 做爲數據庫很強大的功能,建立一個視圖以下,不少解釋都標註在了建立Trigger的腳本中。
    • Trigger的建立
    CREATE OR REPLACE TRIGGER TRIGGER_GSS
     AFTER INSERT   ---當SD_GSS表中的數據發生變化的時候,這個TRIGGER 開始觸發執行
     ON SD_GSS
     REFERENCING NEW AS NEW OLD AS OLD
     FOR EACH ROW
     DECLARE
     VAR_YYEAR VARCHAR2(20);--聲明一個變量
     BEGIN  
     SELECT YYEAR INTO VAR_YYEAR FROM SD_GSS WHERE YYEAR = :NEW.YYEAR;
     IF YYEAR='2017' THEN
     INSERT INTO   SD_GSS2 SELECT *FROM   SD_GSS  
     END IF;
      EXCEPTION
      --這邊觸發器異常時執行的,不少狀況下是往一個表中插入記錄,能夠用異常拋送的方式作成短信通知或者是郵件通知
      --這塊本身有作過微信提醒和郵件提醒
     END;
  • Trigger這個觸發器就建立完成,他的大概意思就是,當SD_GSS中的數據發生變化, 且知足當前變量的條件時
  • 會往SD_GSS2 中插入一筆數據
  • 實際寫SQL的時候,以下SQL會存在很大的風險,當SD_GSS2 或者是SD_GSS 的表結構發生變化的時候,這個Trigger就會一直跳到EXCEPTION那裏出現異常
INSERT INTO   SD_GSS2 SELECT *FROM   SD_GSS
  • REFERENCING NEW AS NEW OLD AS OLD解釋
  • For each row的意義是:在一次操做表的語句中,每操做成功一行就會觸發一次;不寫的話,表示是表級觸發器,則不管操做多少行,都只觸發一次
  • REFERENCING OLD 和 REFERENCING NEW 的含義不一樣,具體取決於觸發器是行級仍是語句級觸發器。對於行級觸發器,REFERENCING OLD 子句容許引用更新或刪除以前行中的值,REFERENCING NEW 子句容許引用已插入或更新的值。在 BEFORE 和 AFTER 觸發器中能夠引用 OLD 和 NEW 行。REFERENCING NEW 子句容許在插入或更新操做發生以前在 BEFORE 觸發器中修改新行
    *:NEW 和:OLD使用方法和意義,new 只出如今insert和update時,old只出如今update和delete時。在insert時new表示新插入的行數據,update時new表示要替換的新數據、old表示要被更改的原來的數據行,delete時old表示要被刪除的數據
  • begin前面出現的new,old不加冒號,begin和end之間出現的new和old都要在前面加上":"javascript

  • Trigger的觸發器機制在實際工做中很實用,快捷方便java

  • Trigger,在Oracle中「幹」掉同樣東西,大部分都是用DROP 視圖也是同樣,刪除以下
    SQL DROP TRIGGER TRIGGER_GSSSQLgit

小結

  • 數據庫是一門功能很強大的語言,任何一門學科都達到了一種無底洞的地步。要想品疆域之寥落,還需不斷前行,攀登高峯。

感激

星星之火能夠燎原,今日點滴的付出,是往後的苦盡甘來。莫愁前路漫漫,天下誰人不識君。感謝你閱讀此文稿,也但願你能不吝賜教。推薦比較全面的我的學習網站,但願對你有幫助。github

關於做者

var normalChild = {
    nickName  : "墨客碼",
    site : "http://www.cnblogs.com/gss0525/"
    descTarget : ".net後臺開發者,熱衷分享技術,心懷感恩,深耕不綴。"
  }
相關文章
相關標籤/搜索