0

我试图找出 DB2 的行触发器和语句触发器之间的区别,但我仍然不太明白 :) 如果我有这样一种情况,即对于特定表中的每个更新列,列的名称都记录在另一个LOG 表行。因此,如果我使用行触发器,那么对于事务中更新该表行的每一行,都会启动触发器。在语句触发器中,如果为该表更新了 10 行,那么更新触发器只启动一次?如果是这样,语句触发器的行为是否仍然与行触发器相同,只是更优化?

在行触发器中,我知道访问 DELETED 或 INSERTED 参数可以获得指向更新行的指针。但是语句触发器呢?DELETED 和 INSERTED 参数是否包含特定列的所有行的列表?

4

1 回答 1

1

您可能想查看信息中心中关于设计触发器的部分。

在本节中,您将找到有关触发器何时触发的信息,

当触发器被激活时,它会根据其粒度级别运行,如下所示:

每一行

它运行的次数与受影响行集中的行数一样多。如果您需要引用受触发操作影响的特定行,请使用 FOR EACH ROW 粒度。这方面的一个示例是在 AFTER UPDATE 触发器中比较更新行的新值和旧值。

对于每个声明

它为整个触发事件运行一次。

如果受影响的行集为空(即,在 WHERE 子句未限定任何行的搜索 UPDATE 或 DELETE 的情况下),则 FOR EACH ROW 触发器不会运行。但是 FOR EACH STATEMENT 触发器仍然运行一次。

您还将了解如何按行或一次访问整个来访问新旧数据。

于 2013-11-02T17:54:49.220 回答