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

SQL Procédural MySQL Discussion :

Problème MYSQL : SELECT INTO OUTFILE @variable. [MySQL-5.6]


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Problème MYSQL : SELECT INTO OUTFILE @variable.
    Bonjour,

    J'ai un problème pour insérer dans un fichier texte le résultat d'une requête select.
    J'ai besoin de lancer un script MYSQL, dont le résultat est stocké dans une table; à la fin, je veux insérer dans un fichier texte le contenu de cette table.
    Comme on ne peut pas ré-écrire en MYSQL dans un fichier déjà existant, il faut que je change chaque fois le nom du fichier de sortie - donc, il faut le créer et le mettre dans une variable.
    J'ai un message d'erreur standard, et je ne vois pas où est le problème.
    Voici le script, il se trouve dans une procédure stockée.
    J'ai fait des tests, la procédure marche et la table TIME_RESULT_END est remplie. La requête OUTFILE marche lorsque je donne un nom de fichier en dur, mais pas quand il s'agit d'une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE filename VARCHAR(2000);
    (...)
    SET filename = CONCAT(DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'), '_result.txt');
    SELECT * FROM TIME_RESULT_END INTO OUTFILE filename;
    Quelqu'un a une idée ?
    NOTE : Ma version MYSQL est 5.6.17.

    Merci.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 87
    Points : 179
    Points
    179
    Par défaut
    Hello,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TIME_RESULT_END INTO OUTFILE @filename;
    C'est mieux avec le @?
    Les questions ne sont pas obligées d'avoir du sens. Mais les réponses, si.
    Terry Pratchett (Procrastination)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut NON!
    Bonjour,

    Non, ça ne marche pas.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET filename = CONCAT((DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')), '_result.txt'); 
    SELECT * FROM TIME_RESULT_END INTO OUTFILE @filename;
    J'ai essayé plusieurs cas de figure, avec ou sans '@'. Mettre une variable après OUTFILE ne marche pas.

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 87
    Points : 179
    Points
    179
    Par défaut
    Et en faisant une requête préparée dans ta procédure stockées?

    Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SET @path := 'blabla/bla';
    SET @fileName := CONCAT((DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')), '_result.txt')
    SET @fullPath := CONCAT(@OutputPath,'/',@fileName);
     
    SET @requete := concat("SELECT * INTO OUTFILE ",@fullPath, " FROM TonSchema.TIME_RESULT_END");
     
    prepare s1 from @requete ;
    execute s1;
    deallocate prepare s1;
    Les questions ne sont pas obligées d'avoir du sens. Mais les réponses, si.
    Terry Pratchett (Procrastination)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Merci:
    OK, je vais essayer ça.
    Une question : s1 est de quel type? Car il va falloir le déclarer dans la procédure.

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 87
    Points : 179
    Points
    179
    Par défaut
    s1 n'a pas de type c'est juste l'identifiant de la requête préparée, nul besoin de déclaration.
    Les questions ne sont pas obligées d'avoir du sens. Mais les réponses, si.
    Terry Pratchett (Procrastination)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut OK ça marche, merci!
    Bonjour,

    Ca marche, merci, voici le code final. Attention, quand on concatène le fichier dans la requête, il faut ajouter simple quote avant et après, afin d'avoir dans la requête le file entre quotes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * INTO OUTFILE 'tmp/20150729155531_result.txt' FROM TIME_RESULT_END ORDER BY project;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SET @prefixdate = DATE_FORMAT(NOW(), '%Y%m%d%H%i%s');
    SET @fileNames = CONCAT(@prefixdate, '_result.txt');
    SET @fullPath = CONCAT('tmp/', @fileNames);
     
    SET @requete = CONCAT("SELECT * INTO OUTFILE '", @fullPath, "' FROM TIME_RESULT_END ORDER BY project");
     
    prepare s1 from @requete ;
    execute s1;
    deallocate prepare s1;
    Amicalement,
    catadanna

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

Discussions similaires

  1. [Sauvegarde] SELECT * INTO OUTFILE ou bien Mysqldump ?
    Par mathieu dans le forum Administration
    Réponses: 17
    Dernier message: 25/04/2013, 16h58
  2. [MySQL] SELECT * INTO OUTFILE
    Par apidou dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 01/09/2008, 09h35
  3. [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, 11h04
  4. Erreur 1045 avec select into outfile
    Par mikaelm dans le forum Administration
    Réponses: 7
    Dernier message: 18/08/2005, 14h45
  5. syntaxe "SELECT * INTO OUTFILE....
    Par mick84m dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/04/2005, 09h53

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