|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() Inscription : janvier 2005 Messages : 163 ![]() |
Bonjour,
J'essaie pour la premiere fois de faire un MERGE. - si je trouve l'id -> UPDATE - si je ne le trouve pas -> INSERT Code :
Mais s'il n'existe pas, la ligne n'est pas insérée. (0 rows merged) Avez vous une idée de se qui ne va pas dans ma requete? Version: 9.2.0.7 Je vous remercie par avance! Vincent
__________________
Pourquoi faire aujourd'hui ce que l'on peut faire demain ... |
||
|
|
00
|
|
|
#2 | ||
|
Membre expérimenté
![]() ![]() Nicolas Gasparotto Inscription : janvier 2007 Messages : 424 ![]() |
Essais de réécrire la clause USING de ton merge comme suit :
Code :
|
||
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : janvier 2005 Messages : 163 ![]() |
Merci pour votre réponse.
Malheureusement il n'y a pas d'amélioration, l'insertion ne se fait toujours pas.
__________________
Pourquoi faire aujourd'hui ce que l'on peut faire demain ... |
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() ![]() Nicolas Gasparotto Inscription : janvier 2007 Messages : 424 ![]() |
Est-ce possible de poster le contenu de chaque table (ou tout du moins un extrait suffisament significatif) ?
Nicolas. |
|
00
|
|
|
#5 | ||||
|
Membre actif
![]() Inscription : janvier 2005 Messages : 163 ![]() |
Bien sûr!
Description de la table : Code :
Code :
__________________
Pourquoi faire aujourd'hui ce que l'on peut faire demain ... |
||||
|
|
00
|
|
|
#6 | ||
|
Membre expérimenté
![]() ![]() Nicolas Gasparotto Inscription : janvier 2007 Messages : 424 ![]() |
Ok, j'avais pas vu qu'il ne s'agissait que d'une table (et non deux).
Bon, alors essaies plutôt ceci : Code :
|
||
|
00
|
|
|
#7 |
|
Membre actif
![]() Inscription : janvier 2005 Messages : 163 ![]() |
Merci NGasparotto,
Ta solution marche à merveille. Par contre je n'ai pas très bien compris la cause. Si tu as le temps, je veux bien une toute petite explication. Sinon, tu ne serais pas de C-S Tlse? Ton nom me dit quelque chose. Merci beaucoup pour ton aide. Vincent
__________________
Pourquoi faire aujourd'hui ce que l'on peut faire demain ... |
|
|
00
|
|
|
#8 |
|
Membre expérimenté
![]() ![]() Nicolas Gasparotto Inscription : janvier 2007 Messages : 424 ![]() |
Bien, on va essayer une petite explication.
MERGE INTO Tu merge dans une table dans laquelle il n'y a priori pas ta ligne 13095, ok ? USING Tu utilise une table (la même en l'occurence) en restreignant sur la ligne 13095. * Si cette ligne existe ici, elle existe aussi dans la table dans laquelle tu merge (puisque la table est la même), donc la jointure est vérifiée, donc tu rentres dans WHEN MATCHED et l'update. * Si cette ligne n'existe pas dans ta deuxième, elle n'existe pas non plus dans dans la première table (puisque ta première table - celle du MERGE INTO - est la même), donc ni dans l'une ni dans l'autre... donc pas de jointure du tout. Pour pouvoir merger, autrement dit pour effectuer une jointure - ta clause ON -, il te faut au moins une ligne pour pouvoir dire qu'elle est de l'autre côté ou non, non ? D'où, dans ton cas précis, l'utilisation de la table DUAL qui te renverra de toute façon la ligne 13095, et regardes si elle est ou non dans ta table dans laquelle tu fais le merge. Sinon, oui CS Toulouse... Nicolas. |
|
00
|
Copyright © 2000-2012 - www.developpez.com