zoukankan      html  css  js  c++  java
  • 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都要在前面加上":"

    • Trigger的触发器机制在实际工作中很实用,快捷方便

    • Trigger,在Oracle中“干”掉一样东西,大部分都是用DROP 视图也是一样,删除如下

      DROP TRIGGER  TRIGGER_GSS
    ```SQL
    
    
    ### 小结
    * 数据库是一门功能很强大的语言,任何一门学科都达到了一种无底洞的地步。要想品疆域之寥落,还需不断前行,攀登高峰。
    
    ### 感激
    星星之火可以燎原,今日点滴的付出,是日后的苦尽甘来。莫愁前路漫漫,天下谁人不识君。感谢你阅读此文稿,也希望你能不吝赐教。推荐比较全面的个人学习网站,希望对你有帮助。
    
    * [简书](http://www.jianshu.com/)
    * [菜鸟教程](http://www.runoob.com/) 
    * [开源中国](http://www.oschina.net/)
    * [CSDN](http://www.csdn.net/) 
    * [51CTO](http://www.51cto.com/) 
    * [GitHub](https://github.com/)
    * [StackOverFlow](http://stackoverflow.com/)
    
    
    ##关于作者
    
    ```javascript
      var normalChild = {
        nickName  : "墨客码",
        site : "http://www.cnblogs.com/gss0525/"
        descTarget : ".net后台开发者,热衷分享技术,心怀感恩,深耕不缀。"
      }
    
    读万卷书,行万里路,方能回到内心深处。
  • 相关阅读:
    IT教育课程考评系统开发-07
    2020091201-1
    ip
    输入框枚举
    语言枚举
    《岁月神偷》弹唱和弦吉他谱_六线谱
    string 转化成 string数组
    获取类的字段值
    获取类的字段
    最全的省份递归
  • 原文地址:https://www.cnblogs.com/gss0525/p/7393878.html
Copyright © 2011-2022 走看看