IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

ORA-01427: Sous-interrogation ramenant un enregistrement de plus d'une ligne lorsque que je fais ma requete


Sujet :

SQL Oracle

  1. #1
    Battosaiii
    Invité(e)
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    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

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Ce serait pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/03/2015, 15h01
  2. Réponses: 1
    Dernier message: 13/02/2015, 11h19
  3. Réponses: 6
    Dernier message: 09/12/2014, 08h39
  4. Réponses: 1
    Dernier message: 19/04/2013, 14h14
  5. Réponses: 6
    Dernier message: 06/09/2010, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo