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.