Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/04/2008, 16h54   #1
Membre confirmé
 
Avatar de eryk71
 
Inscription : novembre 2007
Messages : 322
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 322
Points : 261
Points : 261
Par défaut Oracle 10g : Question sur un MERGE

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:
ORA-30926: unable to get a stable set of rows in the source tables
Et comme texte d'erreur, il me dit qu'il y a 0 lignes traitées dans le MERGE.

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
eryk71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 17h09   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
http://www.developpez.net/forums/sho....php?p=2494036

avec la requête ce serait plus simple
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 17h43   #3
Membre confirmé
 
Avatar de eryk71
 
Inscription : novembre 2007
Messages : 322
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 322
Points : 261
Points : 261
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.
eryk71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 17h51   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 18h39   #5
Membre confirmé
 
Avatar de eryk71
 
Inscription : novembre 2007
Messages : 322
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 322
Points : 261
Points : 261
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))
eryk71 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/04/2012, 10h41   #6
Membre chevronné
 
Avatar de pinocchio
 
Homme François
Développeur informatique
Inscription : novembre 2002
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 35
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : novembre 2002
Messages : 773
Points : 787
Points : 787
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)
pinocchio est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h03.


 
 
 
 
Partenaires

Hébergement Web