【问题标题】:Regarding trigger sequence关于触发顺序
【发布时间】:2011-11-29 23:32:12
【问题描述】:

在一张桌子上有两个触发器。当表中的每一行都有插入或更新时,将执行一个触发器。当表中的每一行都有更新时,将执行第二个触发器。在 ORACLE 10G 中,当表中的一行有更新语句时,哪个触发器首先执行。 oracle中的触发器有执行顺序吗?如果可以,我该如何设置?

【问题讨论】:

    标签: sql oracle plsql oracle10g


    【解决方案1】:

    触发器的触发顺序是任意的,不是您在 10g 中可以控制的。我相信,从技术上讲,它是按照碰巧创建触发器的顺序进行的,但这当然不是您想要指望的。

    在 11g 中,您可以控制触发器的触发顺序。但是,最好用一个调用两个存储过程的触发器替换这两个触发器。所以而不是

    CREATE TRIGGER trg_1
      BEFORE UPDATE ON t
      FOR EACH ROW
    BEGIN
      <<do thing 1>>
    END;
    
    
    CREATE TRIGGER trg_2
      BEFORE UPDATE ON t
      FOR EACH ROW
    BEGIN
      <<do thing 2>>
    END;
    

    你会得到更好的服务

    CREATE PROCEDURE p1( <<arguments>> )
    AS
    BEGIN
      <<do thing 1>>
    END;
    
    CREATE PROCEDURE p2( <<arguments>> )
    AS
    BEGIN
      <<do thing 2>>
    END;
    
    CREATE TRIGGER trg
      BEFORE UPDATE ON t
      FOR EACH ROW
    BEGIN
      p1( <<list of arguments>> );
      p2( <<list of arguments>> );
    END;
    

    【讨论】:

      【解决方案2】:

      对于 11g 之前的版本,不,未指定顺序。来自10g Release 2 docs

      对于启用的触发器,Oracle 会自动执行以下操作:

      • 当单个 SQL 语句触发多个触发器时,Oracle 会按计划的触发顺序运行每种类型的触发器。首先,触发语句级触发器,然后触发行级触发器。

      • Oracle 在设定的时间点针对不同类型的触发器执行完整性约束检查,并保证触发器不会损害完整性约束。

      • Oracle 为查询和约束提供读一致性视图。

      • Oracle 管理触发器动作代码中引用的触发器和模式对象之间的依赖关系

      • 如果触发器更新分布式数据库中的远程表,Oracle 使用两阶段提交。

      • 如果给定语句存在多个相同类型的触发器,Oracle 会以未指定的随机顺序触发多个触发器;也就是说,同一语句的同一类型的触发器不能保证以任何特定的顺序触发。

      【讨论】:

        【解决方案3】:

        在 10g 中超出正常的 before 语句、before row、after row、after 语句顺序,可以不依赖触发触发的顺序。在 11g 中,CREATE TRIGGER statement 中添加了一个新的 FOLLOWS 子句。

        【讨论】:

          【解决方案4】:

          在 Oracle 10g 中,我们不控制在同一时间创建的触发器。它是随机执行的。所以我们不能说哪个触发器首先被触发。为了克服这个问题,Oracle 11g 引入了FOLLOWS CLAUSE。使用它我们可以控制执行顺序。

          【讨论】:

            猜你喜欢
            • 2011-01-10
            • 2019-03-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多