|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 49 ![]() |
Bonjour,
En fait j'ai deux tables avec tous les champs identiques : une table temporaire et une table principale et j'aimerais fais une mise à jour entre ces deux tables. Donc j'ai trouvé la fonction merge qui correspond parfaitement à mon besoin. Pour l'instant tout va bien sauf qu'à l'éxécution de cette fonction, elle fait seulement une insertion dans ma table principale et non une mise à jour ! La fonction Merge va rechercher les matricules semblables et s'il yen a, une mise a jour devrait etre faite sinon une insertion est faite. Code :
J'aimeras avoir un conseil ou une épaule sur laquelle pleurer |
||
|
|
00
|
|
|
#2 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 49 ![]() |
Ai-je le droit de faire ca ?
et donc après d'inverser mon upadte et mon insert. |
|
|
00
|
|
|
#3 | ||
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
D'abord éviter les lignes longues rend le code SQL plus lisible et plus comréhensible ...
Puisque les deux tables ont la même strucuture alors on peut faire simplement: Code :
__________________
Consultant et formateur Oracle |
||
|
|
00
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 49 ![]() |
Merci michel,
Mais en fait j'ai trouvé le soucis qui me posé problème ! J'ai inversé le le "T" et le "G" et ca a résolu mon problème car en fait avant je comparais celui de ma table principale a celui de ma table temporaire alors qu'il fallait que je fasse l'inverse. Encore une erreur bète qui m'a pris 3h à la résoudre !!!!!! pfff Meric encore pour ta réponse ! Bonne continuation |
|
|
00
|
|
|
#5 | ||
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Non ce n'est certainement pas le problème!
La place des colonnes autour de l'égalité n'a aucune importance Un exemple qui le prouve: Code :
__________________
Consultant et formateur Oracle |
||
|
|
00
|
|
|
#6 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 49 ![]() |
Code :
|
||
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 49 ![]() |
Je viens de rerevérifier mon instruction SQL [merge] et tout fonctionne donc je ne sais pas ce qui as fait que dorénavant elle fonctionne.
Donc si quelqu'un trouve une explication qu'il en fasse part car personnellement je ne vois vraiment pas du tout d'ou ca peut venir. Peut-être ma clause d'égalité "ON". Merci |
|
|
00
|
|
|
#8 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
La seule chose à laquelle je peut penser c'est que la table temporaire ne contenait pas les bonnes données lors du premier essai ...
__________________
Consultant et formateur Oracle |
|
|
00
|
|
|
#9 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 49 ![]() |
J'ai toujours un soucis avec mon instruction MERGE car quand je l'éxécute dans l'éxécuteur de requète Oracle tout fonctionne correctement, des modifications ou insertions se font comme prévues.
Mais lorsque je l'éxécute dans mon aplli sous cette forme : Code :
A l'éxécution tout se passe bien sauf qu'il fait une insertion quoiqu'il arrive. J'ai donc pensé que mon erreur pourrait etre venir du fait de tout mettre sur la meme ligne. |
||
|
|
00
|
|
|
#10 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 49 ![]() |
J'ai fait une petite erreur de le post du dessus, c'est pas :
Code :
Code :
|
||||
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 49 ![]() |
Vous allez me prenre pour un gland mais en fait je viens de trouver la source de tous mes soucis, et elle vient pas du tout de mon instruction MERGE. Elle vient des données de ma table temporaire, car en fait je fais une insertion dans cette table grace à un SQL LOADER. Cette commande requiert un fichier à insérer un fichier de log et un fichier de controle.
L'éxécution coince au niveau du chargement des données dans ma table temporaire, tout est décalé, autrement dit : j'ai rien dans mon champ matricule et je retrouve mon matricule dans le champ d'à coté et ainsi de suite. Donc mon merge cherchait à comparer deux matricules ou il n'y avait rien à chaque fois donc forcément il est inséré tout le temps. Maintenant je dois me pencher sur ce problème de chargement de données. En tout cas merci à tous pour m'avoir aidé dans mon problème initial |
|
|
00
|
|
|
#12 | |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Citation:
Il faut savoir aussi que les données d'une table globale temporaire (si la table est définie ainsi) ne sont pas visibles par une autre session que celle qui les a insérées.
__________________
Consultant et formateur Oracle |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com