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 :

Echec de l'UNION de 2 requêtes avec le message "Plus aucune donnée à lire dans le socket"


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 17
    Par défaut Echec de l'UNION de 2 requêtes avec le message "Plus aucune donnée à lire dans le socket"
    Bonjour à tous,
    N'ayant pas trouvé de posts évoquant un problème similaire au mien (désolée si je n'ai pas suffisant cherchén ou bien cherché), je me permets de vous solliciter ici.
    J'utilise l'outil SQLDEVELOPER, Version 21.4.1.349, Build 349.1822, pour requêter sur une BDD Oracle.
    J'utilise la fonction WITH pour travailler différentes cibles et l'objectif est de terminer par un UNION des 2 cibles finales.
    J'ai donc 1 partie commune, puis 2 branches parallèles pour compléter des données spécifiques à ma cible 1 puis à ma cible 2, enfin partie commune grâce à UNION.
    Lorsque je lance la requête pour sortir la cible 1 => OK
    Lorsque je lance la requête pour sortir la cible 2 => OK
    Lorsque je lance l'UNION des 2 requêtes et que je contrôle que j'ai bien l'ensemble, je trouve 15 lignes ayant disparue dans l'UNION
    Lorsque je lance la requête UNION sur ces seules 15 lignes, j'obtiens le message "Plus de données à lire dans le socket".
    Je me casse les dents sur ce soucis depuis le début de la semaine et après avoir contrôlé tout ce que je pouvais, je ne trouve pas d'explication, d'où mon appel à l'aide.
    Je précise que bien que l'UNION fontionne, mais partiellement, j'ai contrôlé que j'ai bien le même nombre de colonnes, libellées à l'identique, de même strucuture ...
    Je vous remercie par avance de votre lecture et de votre aide éventuelle.
    Dans l'attente, je vous souhaite une excellente journée.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 375
    Par défaut
    Bonjour,
    Sans voir les requêtes concernées, sans avoir de jeu de test ni de résultat attendu, difficile de répondre…
    Une première piste: UNION supprime les doublons, donc le nombre de lignes de l'UNION peut être différent de la somme du nombres de lignes de chaque requête.

    UNION ALL permet de garder les doublons.

    Tatayo.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 167
    Par défaut
    Bonjour,

    Sans les requêtes ça va être compliqué. L'erreur que tu obtiens peut être lié à un bug. As-tu essayé d'exécuter ta requête depuis SQL*Plus?

  4. #4
    Membre averti
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 17
    Par défaut Réponse Tatayo
    Bonjour Tatayo, merci pour ce 1er retour rapide.
    Je suis déjà sans doublon dans chacune des 2 requêtes à unir, d'où l'utilisation de UNION
    Je vais tout de même utiliser UNION ALL au cas où ... Les mystères de l'informatique sont une réalité !

    Je peux peu-être transmettre la requête, mais pas de jeu de test, pour raison RGPD entre autres.
    Mais je reprécise ici que reqête 1 et 2 prises séparément donne 100% du résultat attendu, seul l'UNION des 2 arrive à ce message incompréhensible pour moi.

    Merci



    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Sans voir les requêtes concernées, sans avoir de jeu de test ni de résultat attendu, difficile de répondre…
    Une première piste: UNION supprime les doublons, donc le nombre de lignes de l'UNION peut être différent de la somme du nombres de lignes de chaque requête.

    UNION ALL permet de garder les doublons.

    Tatayo.

  5. #5
    Membre averti
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 17
    Par défaut Réponse vanagreg
    Bonjour et merci du retour rapide.

    Je n'ai que SQLDeveloper pour requêter sur la BDD, et uniquement en "intéractif" pas de PL-SQL, pas possible de créer des tables intermédiaires ...
    Bonne journée.

    Citation Envoyé par vanagreg Voir le message
    Bonjour,

    Sans les requêtes ça va être compliqué. L'erreur que tu obtiens peut être lié à un bug. As-tu essayé d'exécuter ta requête depuis SQL*Plus?

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 375
    Par défaut
    Quand je parle de doublon, c'est aussi entre les deux requêtes.
    Par exemple si on retrouve une même ligne dans le résultat de chaque requête, avec un UNION cette ligne n'apparaitra qu'une seule fois dans le résultat final, et 2 fois avec un UNION ALL.

    Concernant les requêtes et le jeu de test, il n'est pas obligatoire d'avoir des données réelles. Il faut juste qu'elles permettent de reproduire le problème.

    Quoi qu'il en soit sans plus d'éléments, on en est réduits à des hypothèses.

    Tatayo.

  7. #7
    Inactif  

    Homme Profil pro
    Freelance EURL / Business Intelligence ETL
    Inscrit en
    Avril 2005
    Messages
    5 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance EURL / Business Intelligence ETL
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2005
    Messages : 5 878
    Billets dans le blog
    3
    Par défaut
    En d'autres mots, ton "UNION" fait un DISTINCT automatiquement - et parfois un ORDER BY selon les SGBD.

    Si tu veux pas faire de DISTINCT, il faut mettre "UNION ALL" à la place de "UNION".
    - So.... what exactly is preventing us from doing this?
    - Geometry.
    - Just ignore it !!
    ****
    "The longer he lived, the more he realized that nothing was simple and little was true" A clash of Kings, George R. R. Martin.
    ***
    Quand arrivera l'apocalypse, il restera deux types d'entreprise : les pompes funèbres et les cabinets d'audit. - zecreator, 21/05/2019

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 201
    Par défaut
    Même piste que les collègues, Union dédoublonne les données

    Tu peux utiliser Union All , ou bien ajouter une colonne fictive à tes 2 requêtes :

    Version actuelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with req1 as (select col1, col2 from ma_BDD1),
     req2 as (select col1, col2 from ma_BDD2),
    select * from req1 
    union 
    select * from req2
    Suggestion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with req1 as (select col1, col2 , 1 as source from ma_BDD1),
     req2 as (select col1, col2 , 2 as source from ma_BDD2),
    select * from req1 
    union 
    select * from req2
    Mais,
    ce que tu dis ici reste mystérieux : Lorsque je lance la requête UNION sur ces seules 15 lignes, j'obtiens le message "Plus de données à lire dans le socket".

    Comment faits-tu pour cibler ces 15 lignes ?
    Ce message 'Plus de données...' arrive en général quand la requête est trop longue, et que tu es déconnecté. Est-ce possible ici ?

  9. #9
    Membre averti
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 17
    Par défaut Fin de la problématique.
    Merci à tous du temps que vous avez pris pour me répondre.
    Juste pour tbc92, j'ai identifié les 15 lignes par différentiel :
    Req1 seule OK + Req2 seule OQ placées dans EXCEL
    Puis requête UNION OK mais en la mettant dans EXCEL pour chercher les communs et les différents, 100% des lignes étaient OK hormis 15 qui avaient disparu dans la req UNION.

    En fait, et je ne comprends pas pourquoi, j'avais un select * req1 union select * req2 => là je perds mes 15 lignes.
    J'ai eu l'idée de faire select champs1 à n de req1 union champs 1 à n de req2 et là 100% des lignes y compris les 15 rebelles

    J'avoue ne pas savoir comment clore ce post mais en tout cas grand merci à tous

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

Discussions similaires

  1. Union de 2 requêtes avec COUNT
    Par popo79pr dans le forum Développement
    Réponses: 2
    Dernier message: 26/10/2016, 16h50
  2. [AC-2007] Union de plusieurs requête avec fonction GROUP BY
    Par py86acces dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/04/2016, 22h05
  3. [AC-2007] Union de plusieurs requête avec fonction GROUP BY
    Par py86acces dans le forum Access
    Réponses: 1
    Dernier message: 17/04/2016, 22h05
  4. Réponses: 4
    Dernier message: 04/07/2015, 18h43
  5. Réponses: 1
    Dernier message: 24/07/2007, 12h10

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