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 Firebird Discussion :

pb : multiple rows in singleton select


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Par défaut pb : multiple rows in singleton select
    J'ai rencontré une erreur louche que j'ai trouvée dans mon code SQL d'une de mes procédures stockées et qui est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select SUM(PV), numcli, ref_pointrep, Tarif
        from TICKET
        where ref_pointfact = :ref_pointfact_input
        group by ref_pointfact, numcli,ref_pointrep, Tarif
        into :Total, :numcli_insert, :ref_pointrep_insert, :Tarif_insert;
    Or celui-ci semble afficher l'erreur suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    multiple rows in singleton select
    .
    multiple rows in singleton select.
    Ce qui n'est pas très logique puisque la requête ne peut retourner qu'une seule ligne. Je l'ai d'ailleurs testée isolément et là pas d'erreur.



    Si java bien, c'est javabeans

  2. #2
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut Re: pb : multiple rows in singleton select
    Citation Envoyé par sillycoder
    J'ai rencontré une erreur louche que j'ai trouvée dans mon code SQL d'une de mes procédures stockées et qui est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select SUM(PV), numcli, ref_pointrep, Tarif
        from TICKET
        where ref_pointfact = :ref_pointfact_input
        group by ref_pointfact, numcli,ref_pointrep, Tarif
        into :Total, :numcli_insert, :ref_pointrep_insert, :Tarif_insert;
    Or celui-ci semble afficher l'erreur suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    multiple rows in singleton select
    .
    multiple rows in singleton select.
    Ce qui n'est pas très logique puisque la requête ne peut retourner qu'une seule ligne. Je l'ai d'ailleurs testée isolément et là pas d'erreur.
    Non cette requete peut renvoyer plusieurs lignes.
    Ce n'est pas parce que vous faites un group by que ca renvoie une seule ligne et heureusement d'ailleurs.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Par défaut
    Je veux bien...
    Mais étant donné le contenu de la base et les valeurs de retour observées de mes yeux (avec le test en dehors de la procédure stockée)...
    Normalement, ça n'en retourne qu'une.

  4. #4
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    Normalement c'est bien là le problème... Normalement
    Le jours où Anormalement vous aurez des données supplémentaires qui font que vous avez deux lignes au lieux d'une comment le système devra réagir ???

    Je veux bien que vous mettiez des controles en amons qui feront que vous aurez toujours une seule ligne, celà Firebird ou Interbase ne peux le deviner. Il vous dit que votre ordre SQL indépendamment des données que vous avez actuellement (car les données sont sencées évoluer) renvoie plusieurs lignes et que vous l'utilisez comme s'il n'en renvoyait qu'une. C'est normal que celà lui pose un problème.

    Je ne vois pas en quoi utilisez une boucle FOR vous pose problème. Actuellement votre boucle ne renvera qu'un enregistrement.
    Celà vous permet en plus de déterminer le comportement que doit avoir votre programme en cas ou il en renverait plusieurs ( les ignorer ? les traiter ?)

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Par défaut
    Justement, j'ai commencé en utilisant une boucle FOR mais j'avais la même erreur qui s'affichait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For select ... from .... into ... do
    begin
       ici j'incrémentais dans une variable temporaire
    end
    Alors cela ne m'aide pas vraiment de me dire de faire quelque chose que j'ai déjà essayé.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Par défaut
    J'ai repris l'ancienne version de mon code avec la boucle for et ai enfin trouvé la solution. Le problème était tout bêtement dû au nom d'une de mes variables... Trop la honte!!

    Merci pour l'aide !

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Par défaut
    comme épilogue au problème, voici une solution qui retourne à coup sûr un enregistrement unique, c'est juste un bout de requête qui ne résoud pas tous les problèmes, mais qui fonctionne parfaitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM EMPLOYEE T1
    WHERE T1.JOB_COUNTRY = 'USA'
      AND RDB$DB_KEY = ( SELECT MIN( T2.RDB$DB_KEY ) FROM EMPLOYEE T2
                         WHERE T2.JOB_COUNTRY = T1.JOB_COUNTRY )
    dans cet exemple, la requête retourne le 1er employé "usa" au lieu de "min", "max" ou tout autre moyen qui isole à coup sûr un unique enregistrement.

    ne pas oublier de "lier" le "sous-select" avec les mêmes champs qui isoles les données de la requête principale.

Discussions similaires

  1. Multiple rows in singleton select
    Par jakouz dans le forum Bases de données
    Réponses: 7
    Dernier message: 16/04/2011, 19h45
  2. multiple rows in singleton select.
    Par le_dilem dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/07/2009, 14h02
  3. erreur multiple rows in singleton select
    Par bassim dans le forum SQL
    Réponses: 5
    Dernier message: 20/12/2006, 16h56
  4. Réponses: 3
    Dernier message: 25/01/2005, 12h31
  5. Mutiple row in singleton select ????? [Important, merci]
    Par SkyDev dans le forum Bases de données
    Réponses: 6
    Dernier message: 20/04/2004, 14h02

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