在匹配成功后合并多个语句

3
我熟悉Oracle的MERGE语句,通常用于更新或插入数据。
我的问题是,它能否用于更新+插入到日志表中? 我想监控所有已更新的记录,因此需要将它们保存在日志表中。因此,我想在WHEN MATCHED子句中放置另一个INSERT语句。 因此,它可能是这样的:
MERGE INTO tableA A
using TableB b
ON (a.Col = b.Col)
WHEN MATCHED THEN UPDATE SET A.col2 = b.col2
  INSERT INTO tableA_Log (key,col)
  VALUES (a.Key,b.col2) ;

这可行吗?还是我必须再次从这两个表中查询(500万记录和400万记录)。提前致谢。

最好使用普通的更新和插入来完成此操作。 - Jeffrey Kemp
1个回答

3
这可能吗?
不,不能在单个MERGE语句中实现。根据文档MERGE的定义如下:
使用MERGE语句从一个或多个源选择行进行更新或插入到表或视图中。
这意味着您可以从多个源表中选择行,但一次只能更新或插入一个表,即您想要合并的表。
您可以在表上创建一个更新后触发器,当基础表中的行被更新时,将行插入到日志表中。

触发器更新后的问题在于,这是对表进行的修复,它在其他超过1个地方被更新,因此我只需要在这种情况下插入日志表。我不想从那些大表中选择两次,我会为你的努力点赞,但这仍然不是我需要的:( - sagi
@sagi 我能想到的唯一方法是使用纯SQL中的单独INSERT语句。当然,你可以在PL/SQL中使用单个事务来完成,但你需要一个纯SQL的解决方案。 - Lalit Kumar B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接