|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Membre confirmé
![]() Inscription : novembre 2007 Messages : 322 ![]() |
Bonjour,
J'ai un script en PL/SQL qui est executé toutes les nuits pour alimenter une table à partir d'une autre table. Aujourd'hui mon script a généré une erreur notamment sur un MERGE. Le code d'erreur généré par Oracle est : Citation:
En regardant le code de la fonction qui utilise le MERGE, je ne vois pas pourquoi il ne traite aucune ligne. Ma question est donc de savoir dans quel cas un merge n'est pas traité? Dans le ON du MERGE : ...using(...) on (t.ag_group_id = g.group_id) J'ai fais un count (*) from t et un count (*) from g J'obtiens t : 1154 lignes g: 1155 lignes Est ce que ceci peut jouer sur l'erreur ? Merci |
|
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
|
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : novembre 2007 Messages : 322 ![]() |
J'ai déjà vu ce post en faisant une recherche, mais ce n'est pas un problème sur le code puisque le script fonctionnait jusqu'à présent.
|
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Ca dépend du contenu des données donc effectivement ça a pu marcher : http://oraclequirks.blogspot.com/200...and-merge.html
En gros, la jointure ne doit pas pouvoir ramener plus d'une ligne pour chaque ligne de ta table |
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Inscription : novembre 2007 Messages : 322 ![]() |
merci pour ta réponse j'ai trouvé la cause de l'erreur :
Dans le ON du MERGE : ...using(...) on (t.ag_group_id = g.group_id) J'ai constaté qu'il y a : 1 fois le numéro 3515 pour t.ag_group_id 2 fois le numéro 3515 pour g.group_id Donc dans la ligne du merge j'aurai 2 fois 3515 = 3515, ce qui retourne donc plus d'une ligne pour la ligne de la table, n'est ce pas? Maintenant comment je peux changer mon SQL pour qu'il le prend en compte sans changer les valeurs de la base de données? Peut être avec un max() de quelquechose pour qu'il ne prend qu'une seule valeur. Est t'il possible d'utiliser un "max" dans le "on" du "merge" ...using(...) on (t.ag_group_id = max(g.group_id)) |
|
|
10
|
|
|
#6 |
|
Membre chevronné
![]() François Développeur informatique Inscription : novembre 2002 Messages : 773 ![]() |
Bonjour,
Merci pour le dernier post qui m'a permis de résoudre mon problème. Pour la question en suspend, pour ma part, j'ai juste effectuer un distinct dans le using car c'était 2 fois la même ligne (pour la partie de données concernées). Sinon oui, un group by pourrait être nécessaire. OK, je suppose que c'est résolu vu la date mais c'est plus pour remercier
__________________
La SNCF est mon ami blog PARIS-GRANVILLE Inscription au panel IPSOS (possibilité d'avoir des bons d'achats) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com