L'instruction MERGE ou l'insertion choisie

Une problématique récurrente en base de données est l'insertion de données "aveugle", sans connaître la présence antérieure de la donnée (c'est à dire dont la contrainte unique existe, clé primaire ou non).
Depuis la 9i, l'instruction MERGE permet d'éviter de passer par un langage supérieur (PL par exemple) afin de, directement en SQL, faire la mise à jour si la donnée existait ou de l'insérer si elle était absente :


merge into client maj using ( SELECT 1 FROM dual ) ori on (client.siret = siretclient)
WHEN MATCHED THEN UPDATE SET client.nom = 'nomClient'
WHEN NOT MATCHED THEN INSERT(client.siret, client.nom )
VALUES (siretclient, 'nomClient');


L'interêt porte principalement lors de mises jour conséquentes, à partir d'une table de chargement par exemple :
MERGE INTO client using chargmtclient
ON (client.siret = chargmtclient.siretclient)
WHEN MATCHED THEN UPDATE
SET client.nom = chargmtclient.nomClient
WHEN NOT MATCHED THEN INSERT (client.siret, client.nom )
VALUES (chargmtclient.siretclient, chargmtclient.nomClient);


Une autre méthode consiste à utiliser du traitement PL et la gestion des exceptions SQL (en l'occurence ORA-00001).

Voir aussi :
- la table dual pour développer.
- Gérer l'auto-increment sous Oracle
- Injection et traitements de masse
- Les exceptions SQL oracle




Vous n'avez pas trouver réponse à votre question ? Préciser votre recherche :

Catégories