PL/SQL : Problème d'apostophes dans génération de liste de valeurs

PL/SQL : Problème d'apostophes dans génération de liste de valeurs - SQL/NoSQL - Programmation

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...

Reply

Marsh Posté le 06-07-2009 à 17:10:28   

Reply

Marsh Posté le 06-07-2009 à 17:57:25    

Faire  

c_list_statut_Sup_a_conf := c_list_statut_Sup_a_conf || ''''
 || replace(CSTATUT.VAL,'''','''''') || ''''; -- on ajoute la valeur trouvée à la liste  


Reply

Marsh Posté le 06-07-2009 à 18:57:04    

cool ! Tout simplement, bien vu  !
J'essaye ça demain, je te tiens au courant.
 
Merki !!!!!

Reply

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  
 [:bastian]  
 
y'a des trucs à pas faire avec les variables ?

Reply

Marsh Posté le 07-07-2009 à 09:59:38    

tu peux montrer le code ou tu exécutes ta requete?

Reply

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


Message édité par 4get9 le 07-07-2009 à 10:37:18
Reply

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


Message édité par 4get9 le 07-07-2009 à 10:41:00
Reply

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

Reply

Sujets relatifs:

Leave a Replay

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