• 【PLSQL】触发器trigger类型,状态,參数


     
    ************************************************************************
      ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
    ************************************************************************

    触发器trigger

    希望在做DML操作时。不须要要提供主键值。系统自己主动生成

    DML触发器的组成由四部分:

    组成部分:

    1.       触发时间,描写叙述:触发时间的时间次序,可能值:after,before

    2.       触发事件,描写叙述:DML语句是触发时间,可能值insertupdatedelete

    3.       触发器类型。描写叙述:触发器被运行的次数,可能值statement,row

    4.       触发体,描写叙述该触发器将要运行的动作,可能值完整的PLSQL

    3.9.1DML触发器的类型

    语句级触发器,行级触发器,

    行级触发器和语句级触发器的差别:

    1.       触发的次数不同,假设DML语句仅仅影响一行,则语句级和行级触发器效果一样。

    2.       假设影响多行,则行级触发器触发的次数比语句级触发器触发的次数多;

    3.9.2 DML触发器的触发顺序

    依据触发的时间,类型不同,能够组合为四种DML触发器,

    1.       sql语句运行之前运行一次:

    a)         触发时间:before

    b)         级别statement

    2.       sql语句影响的每条记录被uupdate,delete或者insert之前运行一次

    a)         触发时间:before

    b)         级别:row

    3.       sql语句影响的每条记录被update,deleteinsert之后运行一次

    a)         触发时间:after

    b)         基本:row

    4.       sql语句运行之后运行一次

    a)         促发时间:after

    b)         级别:statement

    3.9.2 DML行级触发器

             for each row子句创建一个行级触发器,使其在受到触发器事件影响每一行都被触发,比如:

             create or replace trigger trig_name

             {before |after } insert [or update …]

             on tab_name

             for each row [when restricting_condition]

             PLSQL block;

    3.9.3 行级触发器:OLD和:NEW

    在列名前加上:OLD标示符表示该列变化前的值,加上:NEW标示符表示变化后的值。

    因此触发事件:

    1.       insert事件,:OLD.列名(全部的字段是NULL),:NEW.列名(insert语句要插入的值)

    注:(存储过程:oraclePLSQLPro*C, 数据库的值取出进行操作自后。要存放入数据库用存储过程)

    2.       update事件, OLD.列名(在update之前该列的原始值)。NEW.列名(update语句要更细的新值)

    3.       delete事件。OLD.列名(delete行之前列的原始值),NEW.列名(全部字段为null;

    3.9.4触发器的又一次编译

    假设触发器内调用其它函数或者过程,当它们被删除或改动后,触发器的状态被识别为无效。当DML语句激活一个无效触发器时候。oracle将又一次编译触发器代码,假设编译时发现错误,这将导致DML语句运行失败。

             手动编译:

             alter trigger [schema.]trig_name compile;

    2.9.5     触发器状态

    有效状态:enable:

    无效状态:disable

    两种状态的转换:

             alter trigger trig_name [disable | enable];

    alter table语句则一次性改变与指定表相关的全部触发器的使用状态;

             alter table [schema.]tab_name {enable |disable } ALL triggers;

    ************************************************************************
      ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
    ************************************************************************
  • 相关阅读:
    只有标题1没有标题2、3的解决方法
    python函数学习总结
    python基础知识学习总结
    StructuredStreaming中,如果trigger触发时前一批数据还没处理完怎么办?
    StructuredStreaming解析JSON CVS
    StructuredStreaming整合kafka
    kafka--如何选择Kafka的分区数和消费者个数
    kafka中groupid作用
    查看kafka版本
    spark项目java与scala相互调用打包
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7026878.html
Copyright © 2020-2023  润新知