21

我必须在表 target_table 中插入/更新一些记录。这些记录来自一个 source_table。

我正在使用 MERGE 更新/插入 target_table。

MERGE
   INTO  target_table tgt
   USING source_table src
   ON  ( src.column1 = tgt.column1 and
         src.column2 = tgt.column2)
WHEN MATCHED
THEN
   UPDATE
   SET   tgt.column3= src.column3,
         tgt.column4 = src.coulmn4   
WHEN NOT MATCHED
   THEN
INSERT ( tgt.column1,
         tgt.column2,
         tgt.column3,
         tgt.column4 )
VALUES ( src.coulmn1,
         src.coulmn2,
         src.coulmn3,
         src.coulmn4);

我想在更新时添加一些特定条件。

IF target_table.column3 in (val1','val2)

那么只有更新,否则没有更新或插入。

4

2 回答 2

37

您可以简单地将WHERE子句添加到UPDATE. 有关它的更多信息,请参阅 oracle 文档。

因此,在您的情况下,它应该如下所示:

...
WHEN MATCHED
THEN
   UPDATE
   SET   tgt.column3= src.column3,
         tgt.column4 = src.coulmn4
   WHERE tgt.column3 IN (val1, val2) 
WHEN NOT MATCHED
...
于 2013-01-25T10:35:01.727 回答
1

而是尝试如下操作:

MERGE
INTO  target_table tgt
USING source_table src
ON  (src.column1 = tgt.column1)
WHEN MATCHED
THEN
UPDATE
SET   tgt.column3= src.column3,
     tgt.column4 = src.coulmn4  
WHERE src.column1 = tgt.column1 and
     src.column2 = tgt.column2
WHEN NOT MATCHED
THEN
INSERT ( tgt.column1,
     tgt.column2,
     tgt.column3,
     tgt.column4 )
VALUES ( src.coulmn1,
     src.coulmn2,
     src.coulmn3,
     src.coulmn4);
于 2018-06-15T12:18:14.840 回答