2017-05-24 4 views
0

J'ai fait des recherches et je n'ai trouvé aucune solution et je l'ai affichée ici.Instruction de fusion pour la première insertion

Nous avons un travail de chargement de données qui s'exécute quotidiennement. Nous avons des instructions DML séparées à insérer, mettre à jour, etc. Nous voulions éviter les instructions d'insertion à exécuter plusieurs fois.

Existe-t-il une option pour utiliser l'instruction de fusion dans ce scénario pour mettre à jour si l'enregistrement est présent ou insérer s'il n'est pas présent?

S'il vous plaît donnez-moi un exemple si possible que je suis tout à fait nouveau pour les déclarations SQL.

Nous utilisons Oracle pour db2 dbms

Merci à l'avance!

+0

Quelle dbms utilisez-vous? – jarlh

+1

"* Nous utilisons Oracle db2 *" - Oracle vient d'Oracle, tandis que DB2 vient d'IBM. Alors, quels SGBD ** utilisez-vous **? –

+0

Je voulais dire IBM DB2. Bon troll btw même si vous ne donnez pas une réponse #theyareeverywhere –

Répondre

0

avons réussi, throught fusion déclarations :) se

MERGE INTO table1(storeent_id, name, value) AS t1 
    USING (VALUES ((SELECT STOREENT_ID FROM STOREENT WHERE IDENTIFIER='test'), 'SOLR_SERVICEABILITY_URL', 
               'Sample')) AS t2(storeent_id, name, value) 
    ON t1.name = t2.name AND t1.storeent_id = t2.storeent_id 
    WHEN MATCHED THEN 
    UPDATE SET 
     t1.value = t2.value 
    WHEN NOT MATCHED THEN 
    INSERT 
     (name, storeent_id, value) 
     VALUES (t2.name, t2.storeent_id, t2.value); 
0

Utilisez une instruction IF EXISTS, comme ceci:

IF EXISTS (SELECT 1 FROM #mytable# WHERE #column1# = #this# AND #column2# = #that) 
BEGIN 
    #update statement# 
END 

ELSE 
BEGIN 
    #insert statement# 
END 

EDIT: la syntaxe de ce qui peut être trouvée ici: https://www.toadworld.com/platforms/ibmdb2/w/wiki/7777.ifthenelse

cela signifie que mon cas général deviendrait cela dans DB2:

IF (#count of value# = 1) THEN 
    #updatestatement#; 
ELSEIF (#count of value# > 1) THEN 
    #throw an error, as you cannot update uniquely# 
ELSE 
    #insertstatement#; 
END IF; 

J'ai aussi remarqué que vous pouvez exécuter des commandes SQL sur DB2, ce qui pourrait être utile pour cette tâche aussi bien

enfin, jetez un oeil ici, pourrait vous donner d'autres idées :)

DB2 for IBM iSeries: IF EXISTS statement syntax

+0

pouvez-vous me donner un exemple. couldnt en trouver un pour db2 :( –

+0

Bien sûr, je vais modifier ma réponse :) – Martin