1. #1
    Membre à l'essai
    Inscrit en
    mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 42
    Points : 21
    Points
    21

    Par défaut SELECT INTO OUTFILE : problème pour nommer le nom du fichier avec la date du jour.

    Bonjour,

    J'ai besoin d'extraire des donnees au format csv tous les jours et conserver un historique de ces donnees. Pour cela j'utilise INTO OUTFILE, j'ai bien le fichier qui est genere dans mon repertoire mais je n'arrive pas a nommer ce fichier avec la date du jour.

    J'ai fait plusieurs forum et j'ai trouver l'astuce ci dessous mais ca ne fonctionne pas, j'ai toujours une erreur de syntax:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DELIMITER //
    CREATE PROCEDURE FileExtract ()
    BEGIN 
    SET @var = CONCAT ("SELECT * FROM matable INTO OUTFILE 'C:/",  DATE_FORMAT( NOW(), '%Y%m%d'),'.csv');
    PREPARE s1 FROM @var;
    EXECUTE s1;
    DROP PREPARE s1;
    END // 
    DELIMITER ;
    Auriez vous une solution a ce probleme?

    Merci

  2. #2
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 976
    Points : 9 073
    Points
    9 073

    Par défaut

    Salut Hilal74.

    Un nom de fichier sous winows s'écrit avec un anti-slash.
    Mais l'anti-slash est interprété sous MySql comme le caractère d'échappement.
    Donc pour qu'il soit interprété comme un simple antislash, il fait le doubler.

    Oui, sauf que dans une variable, MySql l'interprète et du coup, il vous met un seul antislash.
    Et donc, vous devez encore le doubler ! C'est-à-dire en mettre quatre au lieu de deux.

    D'autre part, un guillemet (") délimite le début ou la fin d'une chaîne de caractère.
    A l'intérieur d'une chaîne de caractères, il faut aussi utiliser le caractère d'échappement afin qu'il ne soit pas interprété --> \".

    Prenons un exemple. Soit la chaîne de caractère contenant le chemin vers un fichier : "E:\22.MySql\41.Unload\Ex_01\excel.txt"
    Comme on le voie, elle débute et se termine par des guillemets, et l'on retrouve l'antislash.

    Cette chaîne de caractères sera d'abord placée dans une variable, puis ensuite concaténée et mis dans une seconde variable.
    Je rappelle que dans la seconde chaîne de caractères, la première variable est interprété comme une chaîne de caractères et du coup, il faut aussi mettre un autre niveau de guillemet.
    Ce qui donne : "\"E:\\\\22.MySql\\\\41.Unload\\\\Ex_01\\\\excel.txt\""

    Voici le résultat à l'exécution :
    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
    --------------
    SHOW VARIABLES LIKE "secure_file_priv"
    --------------
     
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | secure_file_priv |       |
    +------------------+-------+
    --------------
    set @file = "\"E:\\\\22.MySql\\\\41.Unload\\\\Ex_01\\\\excel.txt\""
    --------------
     
    --------------
    set @var = concat("SELECT * FROM `test` INTO OUTFILE ", @file, " FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES TERMINATED BY \'\r\n\'")
    --------------
     
    --------------
    prepare stmt from @var
    --------------
     
    --------------
    execute stmt
    --------------
     
    --------------
    deallocate prepare stmt
    --------------
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Membre à l'essai
    Inscrit en
    mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 42
    Points : 21
    Points
    21

    Par défaut

    Salut Artemus24,

    Merci pour vos conseils. Je vais tester cela et je vous tiens au courant.

  4. #4
    Membre à l'essai
    Inscrit en
    mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 42
    Points : 21
    Points
    21

    Par défaut

    Salut Artemus24,

    J'ai suivi tes conseils ca marche maintenant.

    Merci bcp.

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

Discussions similaires

  1. Probléme pour récuperer le nom du Fichier API Windows
    Par thanks33 dans le forum Débuter
    Réponses: 22
    Dernier message: 28/03/2013, 17h18
  2. nommer un fichier avec la date du jour
    Par PadawanInPerl dans le forum Langage
    Réponses: 6
    Dernier message: 26/05/2010, 17h56
  3. Generer un nom de fichier avec une date
    Par ytsack dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 26/11/2009, 16h52
  4. [Requête] probléme de requête : SELECT * INTO OUTFILE
    Par adil_vpb dans le forum Requêtes
    Réponses: 3
    Dernier message: 31/05/2007, 12h04
  5. [CRONTAB]Nom d'un fichier avec la date du jour
    Par fabszn dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 22/05/2007, 15h37

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