0

我有两个表 TARGET 和 SOURCE。我需要更新 SOURCE 表的行并将这些更新的行插入到 TARGET 表中,然后从 SOURCE 中删除原始行。目前我首先通过 SP 完全更新 SOURCE 表,然后在另一个 SP 中执行移动操作。

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

4

1 回答 1

1

如果我正确理解了您的问题,并且这些都是更新,您可以创建 a以将旧行放入审计表中(不过,您可以定义触发器TRIGGER的不仅仅是s 。并且也是可触发的)。就像是:UPDATEINSERTDELETE

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
于 2012-04-27T22:19:14.473 回答