2017-10-06 96 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

相关问题