如何使用jdbc预处理语句传递可变数量的参数?

时间:2017-10-06 05:53:52

标签: jdbc db2 prepared-statement

db2上使用以下语句执行UPSERT操作:

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

1 个答案:

答案 0 :(得分:1)

如果{{1}}参数标记的数量因运行而异,则必须重新准备参数标记的数量是否发生变化。我会使用一个声明的全局临时表(DGTT),特别是如果有非常多的行。是的,更多的陈述,但更容易扩展,因为您可以动态索引DGTT。

有关DB2中临时表的更多信息,请参阅this question