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后台开发者,热衷分享技术,心怀感恩,深耕不缀。"
  }
相关文章
相关标签/搜索