PL/SQL : utilisation de variable pour liste de valeur dans requête

PL/SQL : utilisation de variable pour liste de valeur dans requête - SQL/NoSQL - Programmation

Marsh Posté le 07-07-2009 à 11:26:40    

Bonjour,
 
j'utilise une variable pour stocker une liste de valeur :

FOR CSTATUT IN (  
     SELECT VAL
     FROM S_LST_OF_VAL
     WHERE TYPE      = 'FS_ORDER_STATUS'
     AND   ORDER_BY >= 20)
LOOP
     IF c_cpt_supaconf>0 THEN    
          c_list_statut_Sup_a_conf := c_list_statut_Sup_a_conf || ', ';  
     END IF;
     c_list_statut_Sup_a_conf := c_list_statut_Sup_a_conf || '''' || REPLACE(CSTATUT.VAL,'''','''''') || '''';
     c_cpt_supaconf := c_cpt_supaconf +1;
END LOOP;


 
au bilan cette variable contient bien ma liste de valeur  

'Confirmé', 'Echec', 'Soumis(e) - En attente', 'Abandon', 'Facture d''essai', 'Refusé', ...


 
mais quand j'utilise cette variable avec un IN dans une requête, ma requête ne retourne jamais rien.

SELECT *
FROM ...
WHERE  ...
     AND ...
     AND ...
     AND lignedetail.status_cd in (c_list_statut_Sup_a_conf);


Pour info si ma liste ne contient qu'une seule valeur, la requête fonctionne.
 
des idées ?  
Merci !
 
PS : J'ai pensé à un souci avec la virgule, mais je vois pas trop comment faire sans/autrement

Reply

Marsh Posté le 07-07-2009 à 11:26:40   

Reply

Marsh Posté le 07-07-2009 à 12:13:41    

c'était pas la peine de dédoubler le topic.
 
ta requete ne peut pas marcher car dans ton cas cela recherche les lignes dont le champ status_cd est égal a "'Confirmé', 'Echec', 'Soumis(e) - En attente', 'Abandon', 'Facture d''essai', 'Refusé', ..." et non pas a chaque valeur distincte.

Reply

Marsh Posté le 07-07-2009 à 12:31:30    

bah disons que ce n'était pas le même souci, donc cela ne correspondait pas au titre.
L'idée c'est aussi de permettre à d'autres de trouver facilement la solution au même problème quand il l'auront dans 4 heures, 1 mois, ou 6 ans, ...
 
Sinon tu veux dire qu'il utilise ma liste comme une seule chaîne de texte ?
ça paraît cohérent par rapport à mon résultat, mais ai-je une solution de contournement ?

Reply

Marsh Posté le 07-07-2009 à 12:50:56    

déclarer une variable qui sera l'équivalent du record que ton select va ramener, construire ton sql sous forme de texte, ouvrir un curseur sur ce sql et boucler en faisant ce que tu as a faire.
 
un exemple de code sur cette page: http://www.experts-exchange.com/Da [...] 19445.html

Reply

Marsh Posté le 07-07-2009 à 13:33:52    

En fait mon script utilise à 20 reprises cette variable, il s'agit de requêtes imbriquées dans des FOR.
Le SQL total fait 1200 lignes et le BEGIN n'est qu'à la ligne 78 :/

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed