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

 PostgreSQL Discussion :

Remplir une table avec COPY FROM + valeurs


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Remplir une table avec COPY FROM + valeurs
    Bonjour,

    Je cherche un moyen de remplir une table :
    • file_in(client_id int4, line_number int4, row_content text)

    Avec un fichier texte.

    La commande COPY FROM me permet d'insérer chaque ligne de mon fichier, dans un enregistrement, plus précisément dans le champ row_content.
    Or, je voudrais que les autres champs soient eux aussi remplis avant, pendant ou après (peu importe), avec une valeur fixe : client_id = 1, et un incrément : line_number = i

    Je ne sais pas si c'est assez clair...

    Voici où j'en suis pour l'instant :

    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
    CREATE OR REPLACE FUNCTION import_file_in(clientid int4, filepath text) RETURNS int4 AS $$
     
    DECLARE
    	nb_lines int4;
    	i int4;
     
    BEGIN
    	-- ****************************************************
    	-- COPY FILE INTO TABLE
    	-- ****************************************************
    	-- Empty table
    	TRUNCATE file_in;
     
    	-- Copy file content
    	COPY file_in(rowcontent) FROM filepath;
     
    	-- Update table with given params
    	UPDATE file_in SET client_id = clientid;
     
    	-- Count number of lines
    	SELECT INTO nb_lines COUNT(*) FROM file_in;
     
    	RETURN nb_lines;
    END;
     
    $$ LANGUAGE plpgsql;
    Déjà, j'ai une Syntax Error sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COPY file_in(rowcontent) FROM filepath;
    Bon, pour ne pas rester bloqué bêtement je remplace ça par une valeur fixe entre cotes : 'c:/test.txt'

    Ensuite, je sèche pour ajouter mon incrément line_number...

    Une idée svp?
    Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Voilà, j'ai créé une séquence pour mon incrément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE SEQUENCE line_number_seq;
    Comme ça le champ line_number est auto-incrémenté.
    Ce n'est pas ce que je voulais, mais bon le résultat est là, et pas trop de temps à perdre avec ce langage...

    Mais je reste bloqué sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COPY file_in(rowcontent) FROM filepath;
    Qui me renvoie une Syntax error.

    Si j'avais une requête SELECT du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable WHERE file_name = filepath;
    filepath étant encore un paramètre IN, hé bien ça marcherait.
    Mais avec COPY, ça marche pô

    Il faut peut-être ajouter des cotes ' quelque part, mais là encore, après cinq essais différents et vains, je ne pige toujours pas la syntaxe.

    Help please

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    filepath étant encore un paramètre IN, hé bien ça marcherait.
    Mais avec COPY, ça marche pô
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE 'COPY file_in(rowcontent) FROM ' || quote_literal(filepath);

Discussions similaires

  1. Remplir une table avec une requête
    Par zapatta dans le forum Access
    Réponses: 12
    Dernier message: 06/09/2006, 11h26
  2. remplir une table avec les jours du mois
    Par david06600 dans le forum Langage
    Réponses: 6
    Dernier message: 04/08/2006, 10h29
  3. Remplir une table avec un requête
    Par curt dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/06/2006, 19h17
  4. Remplir une Table avec 2 tables
    Par Titouf dans le forum Oracle
    Réponses: 4
    Dernier message: 03/11/2005, 09h35
  5. remplir une table avec UTL_FILE.GET_LINE
    Par delphim dans le forum SQL
    Réponses: 9
    Dernier message: 12/03/2004, 10h15

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