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

PL/SQL Oracle Discussion :

Résultat curseur différent d'une requète


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Par défaut Résultat curseur différent d'une requète
    Bonjour,

    J'ai un problème que je n'arrive mais alors vraiment pas à comprendre...

    Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select l.etat_itm_id
    from livret l
    where l.elv_id = 144254
    and l.itm_id = 20093111;
    J'ai une table livret qui a qu'une entrée pour un eleve et un item donné.
    Donc tout naturellement cette requète me renvois qu'une seule ligne.

    Maintenant, si je met cette requète dans un curseur avec l'id de l'élève et l'id de l'item en paramètre, la c'est le drame.

    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
    25
    26
     
    set serveroutput on
    declare
        --Declaration du curseur avec la même requête
        cursor gc_livret_elv_item(elv_id number, itm_id number) is
        select l.etat_itm_id
        from livret l
        where l.elv_id = elv_id
        and l.itm_id = itm_id;
     
        c_livret gc_livret_elv_item%rowtype;
    begin
        DBMS_OUTPUT.ENABLE();
        --Valeur de tests valides
        open gc_livret_elv_item(144254, 20093111);
            --Normalement on ne devrait avoir qu'une valeur de retour mais
            --ce n'est pas le cas
            loop
                fetch gc_livret_elv_item into c_livret;
                exit when gc_livret_elv_item%notfound;
     
                dbms_output.put_line(c_livret.etat_itm_id);
     
            end loop;
        close gc_livret_elv_item;
    end;
    J'ai 200 ligne de résultat!!!

    Pourtant c'est exactement la même requête et les même paramètres qui lui sont passé.

    Est-ce que je loupe quelque chose là?

    Je ne suis certes pas spécialiste PL/SQL mais je n'en suis pas à mon premier curseur et là, je ne vois vraiment pas ce qui cloche.

    Merci d'avance pour votre aide,

    Andréas

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Les paramètres de votre curseur ont le même nom que vos colonnes, c'est donc toute la table que vous renvoyez (aux colonnes nulles près).

    Il suffit de déclarer votre curseur comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        cursor gc_livret_elv_item(p_elv_id number, p_itm_id number) IS
        SELECT l.etat_itm_id
          FROM livret l
         WHERE l.elv_id = p_elv_id
           AND l.itm_id = p_itm_id;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Par défaut
    Merci Waldar!!!!

    Je n'avais même pas remarqué que j'avais utilisé exactement les même noms!! Quel boulet!!

    Je comprend mieux maintenant l'utilisation quasi systématique dans notre base de code du prefixe p_ ...

    Venant du C++ et ayant déjà travaillé sur du code où l'on préfixait les variables de paramètre, je n'appréciais pas cette pratique, mais je vois qu'en PL/SQL ça s'impose!

    EDIT : je croyais que le fait de faire "livret l" et "l.elv_id" permettait de le différencier des paramètres, mais je me trompais...
    Encore merci,
    Andréas

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

Discussions similaires

  1. Réunir des colonnes de tables différentes dans une requête
    Par GCAccess dans le forum Modélisation
    Réponses: 3
    Dernier message: 14/03/2009, 00h59
  2. Réponses: 0
    Dernier message: 14/10/2008, 14h51
  3. Réponses: 8
    Dernier message: 22/07/2008, 15h49
  4. Compter les Dates différentes dans une requête Access
    Par maxireus dans le forum Modélisation
    Réponses: 2
    Dernier message: 11/05/2007, 01h02
  5. Résultats différent entre une requête SQL, et la même en VBA
    Par thetaps dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/09/2005, 13h05

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