2017-10-06 8 views
0

La déclaration suivante est utilisée sur db2 pour effectuer une opération de UPSERT:comment passer un nombre variable de paramètres à l'aide d'une instruction préparée par 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) 
; 

Chaque fois que j'appelle cette déclaration, je vais avoir un nombre différent de lignes à insérer. Est-il possible de faire cet appel en utilisant une instruction préparée? À quoi cela ressemblerait-il?

Ref: https://stackoverflow.com/a/23784606/1033422

+0

Si le nombre de? Les marqueurs de paramètres varient d'une exécution à l'autre, vous devez ensuite les préparer à nouveau si le nombre de marqueurs de paramètres change. J'utiliserais un DGTT surtout s'il y a un très grand nombre de lignes. Oui, plus d'instructions, mais plus facile à mettre à l'échelle, car il peut indexer dynamiquement le dgtt. – mao

+0

Merci @mao. Si vous souhaitez convertir cela en une réponse, je l'accepterais volontiers. –

Répondre

1

Si le nombre de paramètres ? marqueurs varie par course alors vous devez repréparer si le nombre de changements de paramètres marqueurs. J'utiliserais une table provisoire globale déclarée (DGTT) particulièrement s'il y a de très grands nombres de rangées. Oui, plus d'instructions, mais plus faciles à mettre à l'échelle car vous pouvez indexer dynamiquement le DGTT.

Pour plus d'informations sur les tables temporaires dans DB2, voir this question.