IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Comment remplacer dans une variable chaine une simple quote par une double quote ? [Débutant(e)]


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : octobre 2019
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Comment remplacer dans une variable chaine une simple quote par une double quote ?
    Bonjour à tous ,
    devant reprendre du code d'un procédure stockée PL/SQL, je bute sur la chose suivante :


    le problème se situe ( et je le comprends) au niveau du contenu d'une variable ( une référence fournisseur) qui contient une quote ( valeur de la variable Preffour_c : GUI'LLE'MET)
    pour que la requête s'exécute, je cherche à doubler les quotes ( pour avoir GUI''LLE''MET)

    cela va vous paraitre peut-être tout bête ... mais je n'y arrive pas

    merci pour votre aide !!

    voici le code de la requête qui me pose problème.

    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
    33
     
    create or replace 
    FUNCTION FS_RECHERCHE_NEW ( PFam_c           IN CHAR,
    					 PFour_c          IN CHAR,
    					 PRefFour_c       IN CHAR,
      					 PMag_c           IN CHAR,
      					 PDateHistomou_c  IN CHAR,
      					 PDateJour_c      IN CHAR)  RETURN NUMBER AS
    TYPE Curseur_c      IS REF CURSOR;
    ReqStEnv_c          VARCHAR(1000);
     
    ReqStEnv_c    := '	SELECT   HI.NMAGASIN , HI.NUMETIQ , JT.NUMBORD , SUM(HI.QTEVENDUE)
     			FROM     HISTOMOU HI , JOURTR JT
     			WHERE    HI.CFAMILLE	  = ''' || PFam_c 	|| '''   	AND
     			         HI.CFOURNISS	  = ''' || PFour_c 	|| '''	    	AND
     			         HI.REFFOUR	  = ''' || PReffour_c	|| '''	    	AND
     			         HI.MAGDES	  = ''' || PMag_c	|| '''		AND
     			         HI.TYPEENREG	  LIKE ''E%''	    			AND
     			         HI.DATEVENT      BETWEEN
     					TO_DATE('''||PDateHistomou_c||''',''YYYYMMDD'') AND
     	                                TO_DATE('''||PDateJour_c||'''    ,''YYYYMMDD'') AND
              			( HI.NMAGASIN,HI.NUMETIQ) NOT IN
              				( SELECT ST.NMAGASIN, ST.NUMETIQ
                				  FROM	 STOCKC ST
     				          WHERE  ST.CONTRMARQ = HI.MAGDES   		AND
     						 ST.NMAGASIN  = HI.NMAGASIN 		AND
     						 ST.NUMETIQ   = HI.NUMETIQ )		AND
     				HI.NUMFACCLI = JT.NUMENREG
     			GROUP BY HI.NMAGASIN , HI.NUMETIQ , JT.NUMBORD ';
     
     
     
    OPEN Cur_StEnvoye FOR ReqStEnv_c;

    j'ai essayé en amont de formater correctement la valeur de Preffour_c .... mais je n'y arrive pas ( fonction replace ?)

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 562
    Points : 25 376
    Points
    25 376
    Billets dans le blog
    2
    Par défaut
    bonjour,


    SELECT replace(ma_colonne, '''', concat('''', '''')) as TRUC

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 174
    Points : 17 025
    Points
    17 025
    Par défaut
    Je dirais même qu'il n'y a pas besoin de SQL dynamique ici :
    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
    33
    create or replace function FS_RECHERCHE_NEW
    ( PFam_c           in  char
    , PFour_c          in  char
    , PRefFour_c       in  char
    , PMag_c           in  char
    , PDateHistomou_c  in  char
    , PDateJour_c      in  char
    , p_Cur_StEnvoye   out sys_refcursor
    )
    as
    begin
        open p_Cur_StEnvoye for
          select hi.NMAGASIN
               , hi.NUMETIQ
               , jt.NUMBORD
               , sum(hi.QTEVENDUE)
            from HISTOMOU hi
            join JOURTR   jt on jt.NUMENREG = hi.NUMFACCLI
           where hi.CFAMILLE       = PFam_c
             and hi.CFOURNISS      = PFour_c
             and hi.REFFOUR        = PReffour_c
             and hi.MAGDES         = PMag_c
             and hi.TYPEENREG   like 'E%'
             and hi.DATEVENT between to_date(PDateHistomou_c, 'YYYYMMDD')
                                 and to_date(PDateJour_c    , 'YYYYMMDD')
             and (hi.NMAGASIN, hi.NUMETIQ) not in (select st.NMAGASIN, st.NUMETIQ
                                                     from STOCKC st
                                                    where st.CONTRMARQ = hi.MAGDES
                                                      and st.NMAGASIN  = hi.NMAGASIN
                                                      and st.NUMETIQ   = hi.NUMETIQ )
        group by hi.NMAGASIN , hi.NUMETIQ , jt.NUMBORD;
    end;
    /

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : octobre 2019
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    effectivement,

    c'était tellement gros ... que je ne l'ai pas vu

    merci Waldar !

    je clos de sujet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Replace dans une variable
    Par cyrux dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/09/2009, 15h00
  2. [RegEx] recherche et replacement dans une chaine de caractère
    Par Ekimasu dans le forum Langage
    Réponses: 5
    Dernier message: 28/11/2006, 21h39
  3. [SQL] Comment utiliser dans une requête une variable passée par URL
    Par foffa dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/08/2006, 12h27
  4. Réponses: 2
    Dernier message: 01/08/2006, 16h40
  5. [C#] Comment changer dans une chaine
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 13/05/2004, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo