想在oracle sql中的MERGE语句中添加一些条件以进行插入/更新

Bit*_*ter 14 sql oracle

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

我在target_table中使用MERGE进行更新/插入.查询如下

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);
Run Code Online (Sandbox Code Playgroud)

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

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

然后只有更新,否则没有更新或插入.

psu*_*sur 25

你可以简单地添加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
...
Run Code Online (Sandbox Code Playgroud)

  • 嗨,Psur,我有一个类似的问题,但我在 Update 子句的 where 条件中有 2 个条件。但只有其中之一有效。如果我使用这两个条件,它会更新 0 条记录,否则它会更新 ~700K 或 ~80K 记录。在这两种情况下,我预计只会更新约 60 条记录。任何指示都会有很大帮助。谢谢你! (2认同)