2013-01-25 75 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