我有两张桌子TARGET和SOURCE。 我需要更新SOURCE表的行并将这些更新的行插入TARGET表,然后从SOURCE中删除原始行。 目前我首先通过SP完全更新SOURCE表,然后在另一个SP中执行Move操作。
BEGIN P1:
insert into TARGET(select * from SOURCE where col=someValue)
delete from SOURCE where col=someValue;
END P1
我也试过像
这样的东西insert into TARGET(SELECT * FROM OLD TABLE(DELETE FROM SOURCE WHERE col=someValue))
但这在SP中无效。
我认为这是常见情况,例如:历史/存档表并且必须在DB2中具有解决方案。谁能告诉我如何在不影响性能的情况下实现这一目标?我的意思是SP不应该花很长时间才能运行。我也可以删除冗余更新SP。我可以直接将更新的行插入TARGET并从SOURCE中删除相应的行。我也被建议在单个事务中进行删除和插入操作。这会导致任何性能损失吗?
答案 0 :(得分:1)
如果我正确理解你的问题,并且这些都是更新,你可以创建一个TRIGGER
来将旧行放入审计表中(但是,你不只是UPDATE
可以定义触发器。INSERT
和DELETE
也是可触发的。类似的东西:
CREATE TRIGGER AUDIT_SOURCE
AFTER UPDATE ON SOURCE
REFERENCING OLD AS O
FOR EACH ROW
BEGIN ATOMIC
INSERT INTO TARGET
VALUES (O.Col1, O.Col2, ..., O.ColN);
END