PL/SQL : Problème d'apostophes dans génération de liste de valeurs - SQL/NoSQL - Programmation
Marsh Posté le 06-07-2009 à 17:57:25
Faire
c_list_statut_Sup_a_conf := c_list_statut_Sup_a_conf || '''' |
Marsh Posté le 06-07-2009 à 18:57:04
cool ! Tout simplement, bien vu !
J'essaye ça demain, je te tiens au courant.
Merki !!!!!
Marsh Posté le 07-07-2009 à 09:10:27
Bon ma liste est bonne, merci !
Par contre j'ai l'impression qu'on ne peut pas utiliser cette variable, je m'explique :
j'ai utilisé un
DBMS_OUTPUT.PUT_LINE(c_list_statut_Sup_a_conf); |
pour contrôler ma variable et j'obtiens bien ce que je recherchais :
('Confirmé', 'Echec', 'Soumis(e) - En attente', 'Abandon', 'Facture d''essai', ...)
mais lors de l'utilisation de cette variable dans ma requête :
AND lignedetail.status_cd in c_list_statut_Sup_a_conf |
semble poser problème.
En effet si je lance mon sql il ne me trouve rien
alors que :
- si je lance la requête en remplaçant les variables par leur valeurs ça me retourne 1 ligne (mon cas de test)
- si je lance la requête sans la clause utilisant ma variable ça me retourne 1 ligne
y'a des trucs à pas faire avec les variables ?
Marsh Posté le 07-07-2009 à 10:36:57
SELECT ...
FROM ...
WHERE ...
AND ...
AND ...
AND lignedetail.status_cd in c_list_statut_Sup_a_conf
Marsh Posté le 07-07-2009 à 10:37:39
visiblement les virgules semblent être la cause du problème
si je force c_list_statut_Sup_a_conf à :
('toto') : ça fonctionne
('toto', 'titi'): ça ne fonctionne pas
Marsh Posté le 07-07-2009 à 11:18:48
Je vais plutôt créer un nouveau topic et fermer celui-ci puisqu'on s'éloigne du sujet
Marsh Posté le 06-07-2009 à 17:10:28
Bonjour à tous,
je suis en train de générer en PL/SQL une requête.
La 1ere étape consiste à construire une liste de valeurs :
c_list_statut_Sup_a_conf VARCHAR(1000) := '';
c_cpt_supaconf NUMBER(5) := 0;-- nombre d'éléments que compte la liste
...
BEGIN
...
c_list_statut_Sup_a_conf := '('; -- on ouvre les parenthèses
FOR CSTATUT IN
(SELECT VAL FROM S_LST_OF_VAL ....)
LOOP
IF c_cpt_supaconf>0 THEN -- Ce n'est pas le 1er élément donc on rajoute une virgule de séparation
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 || '''' || CSTATUT.VAL || ''''; -- on ajoute la valeur trouvée à la liste
c_cpt_supaconf := c_cpt_supaconf +1; -- on incrémente le compteur d'éléments
END LOOP;
c_list_statut_Sup_a_conf := c_list_statut_Sup_a_conf || ')'; -- on referme les parenthèses
au Bilan j'obtiens une liste de valeurs que je compte utiliser dans un "NOT IN" :
('Confirmé', 'Echec', 'Soumis(e) - En attente', 'Abandon', 'Facture d'essai', ..., 'Annulation Demande résiliation')
Et c'est là qu'apparaît mon souci, car il y a une apostrophe dans la valeur ce qui casse tout.
Comment faire pour m'en sortir ?
Merci d'avances pour vos idées...