Bonjour,
Environnement : Base de données Oracle 9
Dans un schéma, j'ai :
- une table BOU_TMP qui contient des données provenant d'un autre logiciel. La table est remplie tout les soirs par une suppression des données puis remplissage
- une table BOU qui sera alimentée avec la table BOU_TMP
Ces deux tables ont une structure très similaire, à l'exception que dans BOU_TMP j'ai une colonne DATE_COPIE (date de la copie des données de l'autre logiciel) et dans la table BOU j'ai les colonnes USER_CREATION, DATE_CREATION, DATE_MAJ et USER_MAJ
Je cherche à écrire une commande MERGE qui me permette de mettre à jour la table BOU avec les données de la table BOU_TMP. Lorsque l'INSERT du merge est invoquée je veux alimenter en même temps les colonnes USER_CREATION et DATE_CREATION de ma table BOU. Lorsque la commande UPDATE est invoquée je veux alimenter les colonnes DATE_MAJ et USER_MAJ.
Dans les deux tables les ID sont identiques.
Mon problème est lorsque j'utilise le merge, la commande UPDATE est toujours appelée même s'il n'y a pas de modification des valeurs de colonnes et du coup BOU.DATE_MAJ correspond à la date de mon traitement et non pas à la dernière date de modification des données.
Je souhaiterai savoir, comment écrire mon merge (compatible oracle 9) pour que :
- si la ligne BOU_TMP n'existe pas dans BOU alors création de la ligne dans BOU
- si la ligne BOU_TMP existe dans BOU et qu'au moins une des colonnes communes a une valeur différente (valeur différentes, devient null ou n'est plus null) alors mise à jour dans la table BOU
- si la ligne BOU_TMP existe dans BOU et que les colonnes communes sont toutes de même valeur ou null on fait rien.
Je vous remercie par avance de votre aide.






Répondre avec citation
Partager