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 !