Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

DB2 : La commande MERGE

Par Florian MASCARO Publié le 31/05/2016 à 16:36:12 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Introduction

Dans le langage SQL, la commande MERGE permet d’insérer ou de mettre à jour des données dans une table. Cette commande permet d’éviter d’effectuer plusieurs requêtes pour savoir si une donnée est déjà dans la base de données et ainsi adapter l’utilisation d’une requête pour ajouter ou une autre pour modifier la donnée existante. Cette commande est généralement appelé « upsert »

Syntaxe

     MERGE INTO qtemp.merge AS A                  
     USING (SELECT id,entity,value,date FROM qtemp.merge2) B
     ON A.id = B.id                             
     WHEN MATCHED THEN
       UPDATE SET
         A.value = B.value,
         A.date = curdate()
     WHEN NOT MATHED THEN
      INSERT
      (id,entity,value,date)
      VALUES(B.id,B.entity,B.value,B.date);
    
   

MERGE INTO qtemp.merge

La commande MERGE INTO indique à DB2 que ceci est une commande MERGE. Le MERGE peut mettre à jour une table ou une vue, mais la vue de doit pas correspondre aux éléments suivants :

  • Une table de catalogue (https://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.sqlref/src/tpc/db2z_catalogtablesintro.html)

  • Etre une table de résumé (http://www.ibm.com/developerworks/data/library/techarticle/dm-0509melnyk/)

  • Une vue d'une table de catalogue

  • Une vue en lecture seule

USING (SELECT id,entity,value,date FROM qtemp.merge2) B

La clause USING indique quelle table sera utilisée pour modifier la table d'origine. Dans ce cas, les 4 colonnes de la table 'merge2' vont être récupéré et utilisé dans la logique du MERGE.

WHEN MATCHED THEN

La clause WHEN MATCHED THEN indique à DB2 la commande à exécuter quand une ligne dans la table de destination correspond à un enregistrement dans la table d'origine.

UPDATE SET

La commande UPDATE fait partie de la clause WHEN MATCHED THEN. Quand un enregistrement de la table d'origine correspond à un enregistrement de la base de destination, l'enregistrement peut être soit mis à jour, supprimé, ou une condition d'erreur peut être mise en place. Dans ce cas, la commande UPDATE va changer le contenu des champs 'value' et 'date'.

WHEN NOT MATCHED THEN

La clause WHEN NOT MATCHED THEN est exécutée lorsque l'enregistrement ne se trouve pas dans la table d'origine. Dans cette situation, seule une instruction INSERT ou une condition d'erreur est permise.

INSERT () VALUES

L'instruction INSERT fait partie de la clause WHEN NOT MATHED THEN. Ces champs sont insérés dans la table de destination.

Exemple

Dans le cas ou nous voudrions faire un 'UPSERT' sans table d'origine, nous pouvons faire une table 'temporaire', comme dans l'exemple suivant :

     MERGE INTO QTEMP.TEST AS A
     USING TABLE(VALUES(CAST (14 AS DECIMAL(5)), CAST ('TEST2' AS VARCHAR(50)))) 
     B(new_id,new_name)
     ON A.id = B.new_id
     WHEN MATCHED THEN
       UPDATE SET
        A.name = B.new_name
     WHEN NOT MATCHED THEN
       INSERT
        (id,name)
        VALUES (B.new_id,B.new_name)
    
   

Conclusion

La commande MERGE est vraiment très utile en permettant d'éviter de vérifier l'existence d'une donnée dans une table pour ensuite faire le traitement voulu. Cela permet un gain de temps si le nombre de données à insérer est élévé.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels