2017-10-06 9 views
0

次の文は、UPSERT操作を実行するためにDB2で使用されます。jdbcプリペアドステートメントを使用して可変数のパラメータを渡す方法はありますか?

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を参照してください。

関連する問題