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 :

SELECT INTO OUTFILE avec nom de fichier dynamique [MySQL-5.5]


Sujet :

SQL Procédural MySQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Par défaut SELECT INTO OUTFILE avec nom de fichier dynamique
    Bonjour,

    Deux jours que je m'arrache les cheveux sur le sujet ... J'essaie de faire une extraction périodique (event + proc), toutes les 4 heures, d'une table de gestion de distribution d'aliments à des animaux.

    Si je tente mon extraction avec un chemin bien défini, aucun souci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    				-- On extrait les données vers le fichier 
    				SELECT  animal_puce, distributeur_id, distribution_poidsaliment, distribution_poidsanimal, substr(distribution_date, 16, 3) as millisecondes, aliment_id
    				INTO OUTFILE '/tmp/DAAMIC_2945_20180410093756.csv' FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'
    				FROM distribution
    				WHERE distribution_datetransfert=0;
    Mais lorsque j'essaie de passer un fichier en paramètre à OUTFILE ...
    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
     
    				-- On met à jour le nom du fichier
    				SET fichier = 	(
    									SELECT CONCAT 	( 
    					    								'/tmp/DAAMIC_', 
    				    									(SELECT manip_sidex_num FROM manip where manip_id=idManip), '_', 
    				    									CURRENT_TIMESTAMP()+0, 
    				    									'.csv' 
    				    								)
    								);
     
    				-- On extrait les données vers le fichier 
    				SELECT  animal_puce, distributeur_id, distribution_poidsaliment, distribution_poidsanimal, substr(distribution_date, 16, 3) as millisecondes, aliment_id
    				INTO OUTFILE fichier FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'
    				FROM distribution
    				WHERE distribution_datetransfert=0;
    ,
    j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MySQL a répondu: Documentation
     
    #1064 - Erreur de syntaxe près de 'fichier FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'
                    FROM distributio' à la ligne 60
    Avez-vous une idée du problème ?

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET fichier =
    ...
    INTO OUTFILE fichier FIELDS TERMINATED BY ';'
    ...
    Et :
    #1064 - Erreur de syntaxe près de '@fichier FIELDS TERMINATED BY ';'
    Où est @ dans votre code ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Où est @ dans votre code ?
    J'ai fait les tests avec SET fichier et SET @fichier, rien n'y change

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT CONCAT 	( 
    					    								'/tmp/DAAMIC_', 
    				    									(SELECT manip_sidex_num FROM manip where manip_id=idManip), '_', 
    				    									CURRENT_TIMESTAMP()+0, 
    				    									'.csv' 
    				    								)
    Avez-vous testé cette requête seule ?

    Quelle est la valeur de idManip ?

    Suggestion : passer le résultat de la requête dans une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SET num = (
    	SELECT manip_sidex_num 
    	FROM manip 
    	WHERE manip_id = idManip
    );
     
    SET fichier = 
    (
    	SELECT CONCAT('/tmp/DAAMIC_', num, '_', CURRENT_TIMESTAMP()+0, '.csv')
    );
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Par défaut
    La pause méridienne fait du bien, je viens de trouver ma solution en passant par une requête préparée:

    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
     
    				-- On met à jour le nom du fichier
    				SET fichier = 	(
    									SELECT CONCAT 	( 
    					    								'/tmp/DAAMIC_', 
    				    									(SELECT manip_sidex_num FROM manip where manip_id=idManip), '_', 
    				    									CURRENT_TIMESTAMP()+0, 
    				    									'.csv' 
    				    								)
    								);
     
    				-- On prépare la requête d'extraction
    				SET @requete = CONCAT(
    										"SELECT animal_puce, distributeur_id, distribution_poidsaliment, distribution_poidsanimal, substr(distribution_date, 16, 3) as millisecondes, aliment_id
    										INTO OUTFILE '", fichier, "' FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'
    										FROM distribution
    										WHERE distribution_datetransfert=0"
    									);
     
    				PREPARE statment FROM @requete;
    				-- On execute la requete
    				EXECUTE statment;
    				-- On désalloue la mémoire de la requête
    				DEALLOCATE PREPARE statment;

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/08/2017, 00h26
  2. [MySQL] SELECT INTO OUTFILE sans ecraser le fichier
    Par Eliatron dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 19/06/2017, 10h26
  3. Select into Outfile avec outfile dépendant de la requete
    Par thierryK dans le forum Requêtes
    Réponses: 0
    Dernier message: 29/08/2011, 14h51
  4. Select avec nom de table dynamique
    Par boutss dans le forum SQL
    Réponses: 6
    Dernier message: 31/01/2007, 09h51
  5. Erreur 1045 avec select into outfile
    Par mikaelm dans le forum Administration
    Réponses: 7
    Dernier message: 18/08/2005, 14h45

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