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 :

Problème avec Paramètre [PL/SQL]


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Problème avec Paramètre [PL/SQL]
    Bonjour à tous !


    J'ai réalisé une procédure faisant un select avec une clause where A = B, avec un curseur afint d'obtenir plusieurs résultats. Tout fonctionne à merveille !
    voici un exemple :

    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
    CREATE OR REPLACE PROCEDURE a_proc
    AS
        CURSOR Mon_Curseur IS
            SELECT  REF_BATCH
            FROM    TBL_REF_MAP
            WHERE   TRIGRAMME = 'AA';
     
        TAB  Mon_Curseur%ROWTYPE;
        TYPE TAB_CURSEUR IS TABLE OF TAB%TYPE; 
        StrTab TAB_CURSEUR;
    BEGIN
        OPEN  Mon_Curseur;
        FETCH Mon_Curseur BULK COLLECT INTO StrTab;
        CLOSE Mon_Curseur;
     
        FOR indx IN 1..StrTab.COUNT LOOP
            DBMS_OUTPUT.PUT_LINE(StrTab(indx).REF_BATCH);
        END LOOP;
    END a_proc;
    /
    EXECUTE  a_proc
    Ce qui me renvoit :

    Procédure PL/SQL terminée.

    AA-S****
    AA-S****-*********-********

    Les deux résultats sont correct

    Dans un soucis de perfection, je me suis dit.. allez.. faut que j'envoie mon Trigramme ou bi-gramme en paramètre !
    et la ça ce complique

    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
     
    CREATE OR REPLACE PROCEDURE Entre_Trigramme (Trigramme IN VARCHAR2)
    AS
            CURSOR  Mon_Curseur IS
            SELECT  REF_BATCH
            FROM    TBL_REF_MAP
            WHERE   TRIGRAMME = Trigramme ;
     
            TAB  Mon_Curseur%ROWTYPE;
            TYPE TAB_CURSEUR IS TABLE OF TAB%TYPE; -- must use type
            StrTab  TAB_CURSEUR;
    BEGIN
        OPEN  Mon_Curseur;
        FETCH Mon_Curseur BULK COLLECT INTO StrTab;
        CLOSE Mon_Curseur;
     
        FOR indx IN 1..StrTab.COUNT LOOP
            DBMS_OUTPUT.PUT_LINE(StrTab(indx).REF_BATCH);
        END LOOP;
     
            DBMS_OUTPUT.PUT_LINE('Trigramme en paramètre : -'|| Trigramme ||'-');
    END;
    /
    EXECUTE Entre_Trigramme ('AA');
    En renvoit j'obtiens toutes les clés qui sont présente dans la table (tout est faux).. le trigramme lui est correcte (ici 'AA' donc je l’envoi bien en paramètre )

    Pourquoi ai-je obtenus un tel résultat ? cela doit provenir de ma requête sql, j'ai essayé avec '@' pour la variable Trigramme mais rien n'y fait... j'obtiens des erreurs sql

    voilà, Merci de m'aider !
    même si vous n'avez pas de solution fiable à 100% mais que vous avez un semblant d'idée ou de piste à explorer faites moi pars de vos commentaires !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Le langage PL/SQL n'est pas sensible à la casse.
    Alors comment veux-tu que dans l'expression WHERE TRIGRAMME = Trigramme, il soit fait une différence entre le paramètre de ta requête et la colonne de ta table ?
    La solution la plus sûre est de changer le nom du paramètre. Pourquoi pas en le préfixant avec un p.
    Et qualifier le nom de colonne dans la requête en lui adjoignant l'alias de la table.
    C'est une bonne habitude à prendre. Ici, il n'y a qu'une seule table mais dès qu'il y a des jointures, les choses sont tout de suite plus claires.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Merci
    ok j'essaierais demain ! Merci pour ces informations. Je vois souvent des allias mais je ne savais pas que ça avait autant d'importance (je trouvais qu'une requête avec plein d'alias peut rendre difficile la lecture/compréhension). Je ne savais pas également pour la casse, comme quoi ce n'est pas comme du php ou du c ^^ merci d'avoir été aussi rapide ! je vous tiens au courrant demain.

    Bonne soirée

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    La solution correcte consiste en préfixer le paramètre par le nom de la procedure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    WHERE   TRIGRAMME = Entre_Trigramme.Trigramme ;

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Merci mnitu, j'avais oublié dette syntaxe.
    Mais il faut dire aussi que je ne fais du PL que sous la contrainte.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par mnitu Voir le message
    La solution correcte consiste en préfixer le paramètre par le nom de la procedure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    WHERE   TRIGRAMME = Entre_Trigramme.Trigramme ;
    Merci à vous deux sa fonctionne ! J'ai maintenant une procédure avec laquelle je peu recevoir un [bigramme/trigramme] en paramètre !

    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
     
    CREATE OR REPLACE PROCEDURE Entre_Trigramme (Trigramme IN VARCHAR2)
    AS
            CURSOR  Mon_Curseur IS
            SELECT  REF_BATCH
            FROM    TBL_REF_MAP
            WHERE   TRIGRAMME = Entre_Trigramme.Trigramme ;
     
            TAB  Mon_Curseur%ROWTYPE;
            TYPE TAB_CURSEUR IS TABLE OF TAB%TYPE; -- must use type
            StrTab  TAB_CURSEUR;
    BEGIN
        OPEN  Mon_Curseur;
        FETCH Mon_Curseur BULK COLLECT INTO StrTab;
        CLOSE Mon_Curseur;
     
        FOR indx IN 1..StrTab.COUNT LOOP
            DBMS_OUTPUT.PUT_LINE(StrTab(indx).REF_BATCH);
        END LOOP;
    END;
    /
    EXECUTE Entre_Trigramme ('AA');
    so happy !

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

Discussions similaires

  1. [VB]Problème avec une requête SQL
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/03/2006, 17h47
  2. Problème avec une requete SQL sous access
    Par Luther13 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 14/12/2005, 10h39
  3. Problème avec les curseurs SQL SERVER
    Par stefostillrise dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/11/2005, 13h09
  4. [ODBC] Problème avec odbc et sql server 2005
    Par scaleo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/10/2005, 09h49
  5. [SQL Server]Problème avec l'authentification SQL SERVER
    Par tidou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2005, 15h40

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