DB2触发执行顺序

时间:2018-11-08 11:02:06

标签: triggers db2 execution

给......

CREATE PROCEDURE NotaRandomUpdate (@table1_id INT, @new_value INT)
AS
BEGIN
    begin transaction
        UPDATE  Table1
        SET     field1 = @new_value
        WHERE   id = @table1_id

        INSERT INTO Table2 VALUE(@new_value)
    end transaction
END

在上述(非常)简化的情况下,如果有2个单独的TRIGGERS,则在Table1和Table2上每个都有一个,哪个触发器将执行第一个?

我希望获取完整事务的合并结果(事务本身未引用信息),并将合并结果保存到其他地方-因此,我需要从Table1 => Table2的联接中提取数据。 / p>

如果Table1-Trigger执行1st,那么我将面临没有Table2需要的数据的情况。 如果Table2-Trigger执行1st,那么我将面临没有Table1需要的数据的情况。

我假设触发器仅在提交阶段期间/之后执行....或者它们是立即执行Table1-update和Table-insert语句而执行的,因此整个数据库更新都包含在整个事务中了吗?< / p>

这是由于发生在DB2数据库中。

是否可以解决? 还是我面临着运行“一段时间后”活动(如EOD之前的活动),该活动将执行一个查询,该查询将在所有相关更新(当天)完成后将2个表连接起来,当然,前提是每个Table1和Table2有一些可以跟踪的时间戳列。

结束

1 个答案:

答案 0 :(得分:0)

假设没有回滚,表1的任何相关触发器将在表2的任何相关触发器之前触发。

Db2 triggers使用Insert或Update或Delete语句(按行或按语句)执行。因此,触发器主体内的语句仅在执行触发语句期间运行(假定触发器有效)。提交不会调用触发器逻辑。

您执行的每个Insert / Update / Delete语句将在该语句执行期间执行所有相关的有效触发器,然后开始执行下一条语句。