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-requête ramenant un enregistrement de plus d'une ligne


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 150
    Points : 63
    Points
    63
    Par défaut ORA-01427: sous-requête ramenant un enregistrement de plus d'une ligne
    Bonjour,
    voici une requète entre 2 bases de données Oracle dans SQL Developper.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select *
    from ER1.gctraduction
    where trad_code = 
    (select art_code
    from ER1.gcarticle
    where art_code not in (select art_code from ER2.gcarticle));
    Cell-ci ne s'excute pas car elle renvoi pluisieurs lignes :

    ORA-01427: sous-requête ramenant un enregistrement de plus d'une ligne
    01427. 00000 - "single-row subquery returns more than one row"
    *Cause:
    *Action:

    Comment puis-je modifier cette requète pour qu'elle s'excute sans erreur ?
    Merci

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select *
    from ER1.gctraduction
    where trad_code IN
    (select art_code from ER1.gcarticle
    where art_code not in (select art_code from ER2.gcarticle));
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Mais le mieux est souvent d'utiliser les notions EXISTS et NOT EXISTS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM ER1.gctraduction
    WHERE trad_code IN (SELECT art_code FROM ER1.gcarticle a1 WHERE NOT EXISTS (SELECT 1 FROM ER2.gcarticle a2 WHERE a2.art_code = a1.art_code));
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM ER1.gctraduction t
    WHERE EXISTS (SELECT 1 FROM ER1.gcarticle a1 
                  WHERE a1.art_code = t.trad_code
                  AND NOT EXISTS (SELECT 1 FROM ER2.gcarticle a2 WHERE a2.art_code = a1.art_code) 
                  );
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOE-MOA Finance
    Inscrit en
    Novembre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE-MOA Finance
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 17
    Points : 36
    Points
    36
    Par défaut
    Bonjour jfcollombet
    Le plus simple c'est de repmlacer ta sous-requête par une jointure:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select gctraduction.*
    from  ER1.gctraduction, ER1.gcarticle
    where trad_code = art_code
    and   art_code not in (select art_code from ER2.gcarticle));

    Dans ton cas, t'as besoin des données de la table gctraduction uniquement, donc on met gctraduction.* pour éviter que ça nous ramène en plus les données de la table gcarticle.

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

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: 1
    Dernier message: 19/04/2013, 14h14
  4. Réponses: 1
    Dernier message: 20/04/2011, 12h07
  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