zoukankan      html  css  js  c++  java
  • 【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 徐长亮的专栏
    ************************************************************************
  • 相关阅读:
    SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
    谷歌浏览器扩展程序manifest.json参数详解
    获取天气api
    UVA 10385 Duathlon
    UVA 10668 Expanding Rods
    UVALIVE 3891 The Teacher's Side of Math
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 11210 Chinese Mahjong
    UVA 11384 Help is needed for Dexter
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7026878.html
Copyright © 2011-2022 走看看