2017-10-06 44 views
0

下面的語句是用來在DB2上執行操作UPSERT:如何使用jdbc prepared語句傳遞可變數量的參數?

MERGE INTO mytable AS mt USING (
    SELECT * FROM TABLE (
     VALUES 
      (?, ?), 
      (?, ?), 
      —-^repeated many times, one for each row to be upserted 
    ) 
) AS vt(id, val) ON (mt.id = vt.id) 
WHEN MATCHED THEN 
    UPDATE SET val = vt.val 
WHEN NOT MATCHED THEN 
    INSERT (id, val) VALUES (vt.id, vt.val) 
; 

每次我把這種說法,我將不得不插入不同的行數。是否可以使用準備好的聲明進行此調用?那將是什麼樣子?

編號:https://stackoverflow.com/a/23784606/1033422

+0

如果數量多少?參數標記每次運行都不相同,那麼如果參數標記的數量發生變化,您必須重新準備。特別是在有很多行的情況下,我會使用DGTT。是的,更多的語句,但更容易擴展,因爲可以動態地索引dgtt。 – mao

+0

謝謝@mao。如果您想將其轉換爲答案,我很樂意接受。 –

回答

1

如果?參數標記的數量,每次運行變化,那麼你必須重新準備如果參數標記的數量變化。我會使用聲明的全局臨時表(DGTT),特別是如果行數非常多時。是的,更多的聲明,但更容易擴展,因爲您可以動態索引DGTT。

有關DB2中臨時表的更多信息,請參閱this question

相關問題