删除+插入(移动)DB2 OLD TABLE

时间:2012-04-27 16:40:45

标签: sql stored-procedures db2 batch-processing

我有两张桌子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中删除相应的行。我也被建议在单个事务中进行删除和插入操作。这会导致任何性能损失吗?

1 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题,并且这些都是更新,你可以创建一个TRIGGER来将旧行放入审计表中(但是,你不只是UPDATE可以定义触发器。INSERTDELETE也是可触发的。类似的东西:

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
相关问题