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

#1 08/01/2009 11:39:57

clousot
Membre

PL/PgSQL ecriture dans un fichier et syntaxe

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 ?

Hors ligne

#2 08/01/2009 12:36:52

clousot
Membre

Re : PL/PgSQL ecriture dans un fichier et syntaxe

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

Hors ligne

Pied de page des forums