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 14/06/2011, 15h02   #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 Erreur SQL: Sous-interrogation ramenant un enregistrement de plus d'une ligne

Bonjour,


Ma requete sql suivante contient une erreur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
UPDATE document doc
   SET (doc.ID_SIGNATAIRE,doc.ID_SIGNATAIRE_DELEGUE) = (SELECT aut.ID_AUTEUR_IDENTIFIE, aut.ID_OPERATEUR
                    FROM AUTEURS_TROUVES aut
WHERE doc.AUTEUR=aut.AUTEUR
AND doc.IDOPERATEUR = aut.ID_OPERATEUR
AND doc.ID_SIGNATAIRE = aut.ID_OPERATEUR)
 WHERE EXISTS (SELECT NULL
                    FROM AUTEURS_TROUVES aut
WHERE doc.AUTEUR=aut.AUTEUR
AND doc.IDOPERATEUR = aut.ID_OPERATEUR
AND doc.ID_SIGNATAIRE = aut.ID_OPERATEUR);

Voici l'erreur de ma requête :

Citation:
SET (doc.ID_SIGNATAIRE,doc.ID_SIGNATAIRE_DELEGUE) = (SELECT aut.ID_AUTEUR_IDENTIFIE, aut.ID_OPERATEUR
*
ERREUR à la ligne 2 :
ORA-01427: Sous-interrogation ramenant un enregistrement de plus d'une ligne
Comment faire pour résoudre ce problème ?


Merci
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 15h08   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
distinct?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 15h12   #3
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Question : pourquoi cela ramène plusieurs lignes ?

Si les valeurs sont identiques : DISTINCT (merci Laurent )

Sinon, il faut que tu précises ta requêtes pour filtrer exactement la valeur qui doit mettre à jour.

Au passage :
Je pense que doc.ID_SIGNATAIRE_DELEGUE vaudra déjà aut.ID_OPERATEUR, vu que c'est ton critère de sélection de la sous-requête... je pense que tu peux l'enlever du SET

Code :
1
2
3
4
5
6
7
 
UPDATE document doc
   SET (doc.ID_SIGNATAIRE) = (SELECT DISTINCT? aut.ID_AUTEUR_IDENTIFIE
                    FROM AUTEURS_TROUVES aut
WHERE doc.AUTEUR=aut.AUTEUR
AND doc.IDOPERATEUR = aut.ID_OPERATEUR
AND doc.ID_SIGNATAIRE = aut.ID_OPERATEUR)
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 15h35   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Citation:
Envoyé par pacmann Voir le message
Question : pourquoi cela ramène plusieurs lignes ?
Parce que tes données font que tu as au moins un cas où tu ramènes plus d'une ligne !
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 15h40   #5
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
Merci de vos reponses,

pacmann : Si tu observe ma requete tu verras que ID_SIGNATAIRE_DELEGUE n'est pas utilisé dans ma sous requete. J'ai donc reellement besoin de modifier cette valeur .Commen donc utiliser DISTINCT pour 2 colonnes ?

Merci
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 15h48   #6
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Ah désolé, j'ai biglé

Le DISTINCT ne peut s'appliquer que sur toutes les colonnes du SELECT de toutes façons. Ce qui donne :

Code :
1
2
 
SELECT DISTINCT aut.ID_AUTEUR_IDENTIFIE, aut.ID_OPERATEUR
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann 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 05h15.


 
 
 
 
Partenaires

Hébergement Web