2017-09-24 48 views
-1

我試圖在DB2 AS400中執行UPSERT(更新或插入)。我遵循了IBM指定的準則。但是,它表示MERGE無效。這是我的查詢。無法在DB2中合併

MERGE INTO myTable AS tab 
USING (VALUES 
    (123pk,'6','11','22','33',CURDATE()) 
) AS merge (TSPK,adf1,adf2,adf3,adf4,adf5) 
ON tab.TSPK= merge.TSPK 
WHEN MATCHED THEN 
    UPDATE SET tab.TSPK= merge.TSPK, 
       tab.adf1= merge.adf1, 
       tab.adf2= merge.adf2, 
       tab.adf3= merge.adf3, 
       tab.adf4= merge.adf4 
       tab.adf5= CURDATE()     
WHEN NOT MATCHED THEN 
    INSERT (TSPK,adf1,adf2,adf3,adf4,adf5) 
    VALUES (merge.TSPK, merge.adf1, merge.adf2,merge.adf3,merge.adf4,CURDATE()) 

它拋出的錯誤是

[SQL0104] Token MERGE was not valid. Valid tokens: (CL END GET SET CALL DROP FREE HOLD LOCK OPEN WITH ALTER. [SQL State=42601, DB Errorcode=-104] 

在DB2中,它顯示了我們可以用MERGE關鍵字。 https://www.ibm.com/developerworks/community/blogs/SQLTips4DB2LUW/entry/merge?lang=en

+1

嘗試將別名「MERGE」更改爲別的。也許這是一個保留字的問題。 – sagi

+0

@sagi,在DB2中使用MERGE關鍵字。請檢查https://www.ibm.com/developerworks/community/blogs/SQLTips4DB2LUW/entry/merge?lang=en – Aliy

+0

不是'MERGE'語句。 MERGE'別名。 - >'(123pk,'6','11','22','33',CURDATE()) )AS merge' – sagi

回答

1

合併已添加到IBM i版本7.1上的DB2 for i。如果您使用的是早期版本(6.1或更早版本),則不僅無法使用,而且無法使用MERGE聲明。