Bonjour,
J'ai un problème d'interprétation de requête dans une clause IN.
Je pars d'un logiciel que je ne contrôle qui récupère une liste de magasins au format VARCHAR(N) :
Le N s'adapte au nombre de magasins récupérés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part LISTE_MAG := '''24'',''30'',''52'''
Voici le code :
Je n'arrive pas à récupérer correctement ma liste de magasins pour ma condition
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
27
28
29
30
31
32 create or replace PROCEDURE PROMO_W (LISTE_MAG VARCHAR2) IS nb_mag NUMBER(4); vcode_mag NUMBER(4); vliste_mag VARCHAR2(200); vliste_mag2 VARCHAR2(200); BEGIN vliste_mag2 := translate(LISTE_MAG, 'A''', 'A'); DBMS_Output.Put_Line ('Magasins translate : '||vliste_mag2); vliste_mag2:=','||vliste_mag2||','; SELECT REGEXP_COUNT(vliste_mag2,',',1,'i')-1 INTO nb_mag FROM dual; DBMS_Output.Put_Line ('Nb Magasins : '||nb_mag); vliste_mag := null; FOR i IN 1..nb_mag LOOP SELECT substr(vliste_mag2,1+instr (vliste_mag2,',',1,i),instr (vliste_mag2,',',1,i+1)- instr (vliste_mag2,',',1,i)-1) INTO vcode_mag FROM dual; vliste_mag := vliste_mag||','||to_number(vcode_mag); END LOOP; vliste_mag := substr(vliste_mag,2); DBMS_Output.Put_Line ('Magasins 2 : '||vliste_mag); FOR mag in (select nommagasin from magasins where codemagasin in (vliste_mag)) LOOP DBMS_Output.Put_Line ('Magasins : '||mag.nommagasin); END LOOP; END;J'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part where codemagasin in (vliste_mag)
Est-ce qu'il existe un moyen de contourner ce problème sans passer par une boucle ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Connexion à la base de données BBD_R7. ORA-01722: Nombre non valide ORA-06512: à "PROMO.PROMO_W", ligne 57 ORA-06512: à ligne 8 Magasins Init : '24','30','52' Magasins translate : 24,30,52 Nb Magasins : 3 Magasins 2 : 24,30,52 Processus fermé. Déconnexion de la base de données BBD_R7.
Merci d'avance pour l'aide
Partager