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 20/04/2011, 11h55   #1
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
Par défaut ORA-01427: Sous-interrogation ramenant un enregistrement de plus d'une ligne lorsque que je fais ma requete

Bonjour,

J'ai ecrit une requete pour pouvoir remplir ID service de la table MODELEUSER avec la valeur NOSERV de la table UTILISATEUR_SERVICE suivant la condition
UTILISATEUR_SERVICE.ID_UTILISATEUR= MODELEUSER.IDUTILISATEUR.

Voici ma commande SQL :


Code :
1
2
3
4
5
 
 
UPDATE MODELEUSER 
SET (MODELEUSER.IDSERVICE) = (SELECT UTILISATEUR_SERVICE.NOSERV FROM UTILISATEUR_SERVICE, MODELEUSER WHERE UTILISATEUR_SERVICE.ID_UTILISATEUR= MODELEUSER.IDUTILISATEUR)
WHERE (MODELEUSER.IDSERVICE IS NULL) AND EXISTS (SELECT NULL FROM UTILISATEUR_SERVICE, MODELEUSER WHERE UTILISATEUR_SERVICE.ID_UTILISATEUR= MODELEUSER.IDUTILISATEUR)
Or j'ai un message d'erreur :

Citation:
ORA-01427: Sous-interrogation ramenant un enregistrement de plus d'une ligne
Le select retourne plusieurs valeurs mais avec la condition WHERE EXists la correspondance devrait se faire. Quel est l'erreur dans la commande précedente ?
Merci
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 12h07   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Ce serait pas plutôt :
Code :
1
2
3
4
5
6
UPDATE MODELEUSER 
SET (MODELEUSER.IDSERVICE) = (SELECT UTILISATEUR_SERVICE.NOSERV FROM UTILISATEUR_SERVICE WHERE UTILISATEUR_SERVICE.ID_UTILISATEUR= MODELEUSER.IDUTILISATEUR)
WHERE (MODELEUSER.IDSERVICE IS NULL) 
AND EXISTS (
SELECT NULL FROM UTILISATEUR_SERVICE
WHERE UTILISATEUR_SERVICE.ID_UTILISATEUR= MODELEUSER.IDUTILISATEUR)
Si tu mets MODELEUSER dans le FROM de tes sous-requêtes il va chercher les lignes de toute la table et non de la ligne en cours de traitement dans l'UPDATE.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h17.


 
 
 
 
Partenaires

Hébergement Web