给......
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有一些可以跟踪的时间戳列。
结束
答案 0 :(得分:0)
假设没有回滚,表1的任何相关触发器将在表2的任何相关触发器之前触发。
Db2 triggers使用Insert或Update或Delete语句(按行或按语句)执行。因此,触发器主体内的语句仅在执行触发语句期间运行(假定触发器有效)。提交不会调用触发器逻辑。
您执行的每个Insert / Update / Delete语句将在该语句执行期间执行所有相关的有效触发器,然后开始执行下一条语句。