2013-01-25 41 views
12

我必须在表target_table中插入/更新某些RECORDS。这些记录来自一个source_table。想要在oracle sql中插入/更新MERGE语句中添加一些条件

我正在使用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)

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

回答

17

您可以简单地将WHERE子句添加到UPDATEMore about it in oracle docs.

所以你的情况应该是这样的:

... 
WHEN MATCHED 
THEN 
    UPDATE 
    SET tgt.column3= src.column3, 
     tgt.column4 = src.coulmn4 
    WHERE tgt.column3 IN (val1, val2) 
WHEN NOT MATCHED 
... 
+0

感谢您的答复。我将尝试你的代码。 –

+0

@ user1965381可以吗? – psur

+0

嗨Psur,我有一个类似的问题,但我有条件在Update条款中的2个条件。但只有其中一个有效。如果我同时使用它更新0条记录的条件,则它会更新〜700K或〜80K条记录。有了这两个条件,我预计只有约60条记录需要更新。任何指针都会有很大的帮助。谢谢! – KLeonine

2

您可以通过皮纳尔达瓦使用这篇文章的提问

MERGE statement

+0

问题的主题是Oracle PL/SQL,而不是SQL Server。 –

+0

但是因为问题没有被标记为+1。 – pnuts