PL/SQL : utilisation de variable pour liste de valeur dans requête - SQL/NoSQL - Programmation
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.
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 ?
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
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
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