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

Oracle Discussion :

ORA-01427: single-row subquery returns more than one row


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 87
    Par défaut ORA-01427: single-row subquery returns more than one row
    Bonjour,

    Ce n'est pas un sujet nouveau vous direz. C'est vrai. Mais je n'arrive pas à trouver de solution à mon problème.

    J'essaye de faire un update comme ci-bas et je rencontre l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01427: single-row subquery returns more than one row
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    UPDATE TableA ta
    SET ta.DATE=(SELECT DISTINCT te.date   
        FROM  TableB tb,
              TableC tc,
              TableD td,
              TableE te,
              TableF tf
        WHERE ta.CYCLE = to_date('2011/04/09','yyyy/mm/dd hh24:mi:ss')
          AND te.tbll IN (32030,32029)
          AND tb.compte = tc.compte
          AND te.acompte = td.fact
          AND te.code = tf.code )
    WHERE EXISTS 
       (SELECT 1  
        FROM  TableB tb,
              TableC tc,
              TableD td,
              TableE te,
              TableF tf
        WHERE ta.CYCLE = to_date('2011/04/09','yyyy/mm/dd hh24:mi:ss')         
          AND te.tbll IN (32030,32029)
          AND tb.compte = tc.compte
          AND te.acompte = td.fact
          AND te.code = tf.code );
    En effet, le select me retourne 4 lignes. Je me demande de quelle autre façon je pourrais procéder.
    D'ailleurs si quelqu'un sait s'il est possible de simplifier cette requête, je suis preneur.

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Decon Voir le message
    En effet, le select me retourne 4 lignes. Je me demande de quelle autre façon je pourrais procéder.
    Comment nous serions plus à même de déterminer LA date à choisir parmi les quatre ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 87
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Comment nous serions plus à même de déterminer LA date à choisir parmi les quatre ?
    Si j'avais réponse à ta question, je n'aurai certainement pas poser la mienne!

    Ma question était de savoir comment je pouvais contourner ce problème.

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    N'y a t-il pas un problème de jointure dans la requête ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT te.date   
        FROM  TableB tb,
              TableC tc,
              TableD td,
              TableE te,
              TableF tf
        WHERE ta.CYCLE = to_date('2011/04/09','yyyy/mm/dd hh24:mi:ss')
          AND te.tbll IN (32030,32029)
          AND tb.compte = tc.compte
          AND te.acompte = td.fact
          AND te.code = tf.code )
    tb est joint à tc
    te est joint à td et tf

    Quid de la relation entre les deux groupes de tables ?

    Si ce n'est pas ça : Min, Max, Jointures supplémentaires..?

    EDIT : Ta solution est de n'obtenir qu'un seul enregistrement mais nous ne pouvons pas déterminer de règle pour toi pour obtenir un tel résultat

    Tu as une colonne de table et quatre résultats possibles... lequel est le plus probant ?? Nous n'en n'avons pas la réponse

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Pour contourner le problème, ne mettre à jour que quand il n'y a qu'une seule date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    UPDATE TableA ta
    SET ta.DATE=(SELECT DISTINCT te.date   
        FROM  TableB tb, TableC tc, TableD td, TableE te, TableF tf
        WHERE ta.CYCLE = to_date('2011/04/09','yyyy/mm/dd hh24:mi:ss')
          AND te.tbll IN (32030,32029)
          AND tb.compte = tc.compte
          AND te.acompte = td.fact
          AND te.code = tf.code )
    WHERE 1 =   (SELECT count(distinct te.date)  
        FROM  TableB tb, TableC tc, TableD td, TableE te, TableF tf
        WHERE ta.CYCLE = to_date('2011/04/09','yyyy/mm/dd hh24:mi:ss')         
          AND te.tbll IN (32030,32029)
          AND tb.compte = tc.compte
          AND te.acompte = td.fact
          AND te.code = tf.code );

  6. #6
    Membre émérite Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Par défaut
    Bonjour,

    tu peux sinon faire un pl/sql

    avec un curseur, tu boucles dessus pour tes updates comme cela tu n'auras pas d'erreur mais faut-il que tu dois updater les 4 lignes

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 87
    Par défaut
    Merci pour vos réponses.

    En ce qui concerne les problèmes de jointure, c'est normal. J'ai enlevé dans le message certaines conditions, histoire de vous montrer juste à quoi ça ressemble.

    McM, j'essaye ta méthode pour voir ce que ça donne; sinon je pense que je serai obligé de faire du pl/sql.

    Je regarde tout ça de près et je vous tiens informés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/02/2008, 10h07
  2. Réponses: 14
    Dernier message: 15/11/2007, 10h22
  3. Réponses: 4
    Dernier message: 25/01/2007, 15h02
  4. Réponses: 3
    Dernier message: 08/12/2006, 17h28
  5. ORA-01427: single-row subquery returns more than one row
    Par hadid dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/10/2006, 15h35

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