PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Comment remplacer automatiquement \ par \\ dans 'C:\test' » 12/01/2009 17:09:13

gleu a écrit :

La question est plutôt de savoir comment vous initialisez Chemin. Poster un code complet nous permettra plus facilement de vous aider.

Desole j'ai pense que       Chemin := 'C:\test'    que j'avais mis en premier message suffisait.
Finalement je suis parvenu a mes fins de cette maniere :     Chemin := 'C:\\test'  -- \ de base double

ainsi
Resultat VARCHAR;
Resultat := replace(Chemin,'\\','\\\\');

me donne le resultat que j' attends... C' est donc le chemin que l'on me donne qui doit etre formate pour etre compatible avec mon code.

#3 Général » Comment remplacer automatiquement \ par \\ dans 'C:\test' » 08/01/2009 16:53:35

clousot
Réponses : 6

En imaginant avoir une variable Chemin := 'C:\test'
Comment peut on y remplacer toute occurence du caractere '\'  (BACKSLASH) par '\\'

En faisant (en pl/pgsql):

Resultat VARCHAR;
Resultat := replace(Chemin,'\\','\\\\');

Il semble que les BACKSLASH presents dans Chemin soient interpretes avant meme d' effectuer le remplacement de chaines
c'est a dire que le remplacement essaye de se faire sur 'C:<caractere TAB>est'

#4 Re : PL/pgSQL » PL/PgSQL ecriture dans un fichier et syntaxe » 08/01/2009 12:36:52

Finalement j'ai trouve un moyen qui permette de definir un chemin de fichier plus souple en passant par la definition d'une requete passee a un EXECUTE :

Voici le code qui fonctionne ci-dessous (mon repertoire C:\test etant tojours accessible en lecture et ecriture)

CREATE OR REPLACE FUNCTION essais() RETURNS VOID as $$
  DECLARE
    filename VARCHAR := 'C:\\\\test\\\\PR10.txt';  -- notez que mes \ d'origine sont doubles une fois de plus
    query_ VARCHAR;
  BEGIN
    DROP TABLE IF EXISTS Table_essais;
    CREATE TABLE Table_essais (report_line VARCHAR);
    -- Lecture d'un fichier dans la table Table_essais
    COPY Table_essais FROM 'C:\\test\\PR09.txt';
    -- Ecriture du contenu de  Table_essais dans le fichier 'C:\\test\\PR10.txt'
    --COPY Table_essais TO 'C:\\test\\PR10.txt';
    query_:='COPY Table_essais TO \''||filename||'\'';  -- /!\ utilisation de simple ' uniquement et pas de " 
    EXECUTE query_;
END;
$$ language plpgsql;

Desole pour le derangement, et j'espere que cela pourra eviter a quelqu'un de "galerer" dessus comme je l'ai fait

#5 PL/pgSQL » PL/PgSQL ecriture dans un fichier et syntaxe » 08/01/2009 11:39:57

clousot
Réponses : 1

Bonjour,

Je developpe en PL/PgSQL et dans la fonction suivante :

CREATE OR REPLACE FUNCTION essais() RETURNS VOID as $$
  DECLARE
    filename VARCHAR := 'C:\\test\\PR10.txt';
  BEGIN
    DROP TABLE IF EXISTS Table_essais;
    CREATE TABLE Table_essais (report_line VARCHAR);
    -- Lecture d'un fichier dans la table Table_essais
    COPY Table_essais FROM 'C:\\test\\PR09.txt';
    -- Ecriture du contenu de  Table_essais dans le fichier 'C:\\test\\PR10.txt'
    --COPY Table_essais TO 'C:\\test\\PR10.txt';
    COPY Table_essais TO filename;
   
END;
$$ language plpgsql;

Je ne comprend pas pourquoi la syntaxe  suivante fonctionne   
      COPY Table_essais TO 'C:\\test\\PR10.txt'
et la syntaxe suivante me retourne une erreur :
       COPY Table_essais TO filename; 
l' erreure retournee est LIGNE 1 : COPY Table_essais TO  $1

Cela veut il dire qu'on est oblige d'ecrire 'en dure' dans le code le chemin du fichier ?

Pied de page des forums

Propulsé par FluxBB