在匹配后合并多个语句

时间:2016-02-02 08:52:05

标签: sql oracle performance merge sql-update

我熟悉oracle的MERGE语句,该语句通常用于UPDATE ELSE INSERT。

我的问题是,是否可以用它来更新 +插入日志表?
我想监视已更新的所有记录,因此我需要将它们保存在日志表中。因此,我不想再从两个巨大的表中进行选择,而是想在INSERT子句中放置另一个WHEN MATCHED语句。 所以它会是这样的:

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) ;

这可能吗?或者我必须再次从两个表中获得另一个查询(500mil记录和40mil记录)。

提前致谢。

1 个答案:

答案 0 :(得分:3)

  

这可能吗?

不,在单个 MERGE 语句中无法实现。

来自documentation MERGE:

的定义
  

使用MERGE语句从一个或多个来源中选择行进行更新或将插入表格或视图。

这意味着您可以从多个源表中选择行,但一次只更新或插入一个表,即。要合并的表。

您可以在表上创建更新后触发器,以便在基表中更新行时将行插入到日志表中。