2013-11-01 113 views
4

我嘗試了以下幾個變體,但我仍然遇到錯誤。任何方式來解決這個問題。 DB2 10.1(DB2 z/OS的V10)DB2 MERGE語句錯誤

對於以下

MERGE INTO TRGT t 
USING SRC s 
ON (t.ACCTID=s.ACCTID AND s.SEQID=123) 
WHEN MATCHED THEN 
UPDATE SET 
MyFlag = 'Y' 

錯誤: 意外的標記 「SRC」 之後發現 「」。預期標記可能包括: 「(」 SQLSTATE = 42601

SQLSTATE:42601 錯誤碼:-104


然而以下

MERGE INTO TRGT t 
USING (SELECT SEQID, ACCTID FROM SRC WHERE SEQID=123) s 
ON (t.ACCTID=s.ACCTID) 
WHEN MATCHED THEN 
UPDATE SET 
MyFlag = 'Y' 

錯誤: 使用所保留的「」之後的單詞「SELECT」無效,預期的標記可能包括:「VALUES」SQLSTATE = 42601

SQLState:42601 錯誤代碼:-199

回答

6

不幸的是(我從來不明白爲什麼),在DB2 for z/OS中,您不能使用表作爲MERGE的源,您只能使用VALUES子句。此外,如果要合併多行,則必須使用​​3210,並指定數值在您的數組中。

MERGE INTO TRGT t 
USING (VALUES (:param1, :param2) FOR :paramNumRows) s 
    ON (t.ACCTID=s.ACCTID) 
WHEN MATCHED THEN 
    UPDATE SET MyFlag = 'Y' 
+0

bhamby,謝謝你的迴應。 –

+0

@RajuRaju:如果我的回答回答你的問題,請「接受」它(應該在投票按鈕下面有一個複選標記來做這件事)。您也可以投票回答。 – bhamby