Question

SQL a la possibilité de vider les données dans un fichier, en utilisant l'option INTO OUTFILE, pour exmaple

SELECT * from FIshReport INTO OUTFILE './FishyFile'

Le problème est, cette commande est autorisée que si le fichier n'existait pas avant lui. Il crée le fichier et entre ensuite les données. Alors, est-il possible d'ajouter des données à un fichier de cette façon?

Était-ce utile?

La solution

Comme la page de MySQL sur la syntaxe SELECT indique:

http://dev.mysql.com/doc/refman/ 5.0 / fr / select.html

l'alternative à cela est d'émettre la commande SELECT du client MySQL:

However, if the MySQL client software is installed on the remote machine,
you can instead use a client command such as mysql -e "SELECT ..." > file_name 
to generate the file on the client host. 

qui, dans votre cas, serait modifié pour être:

mysql -e "SELECT * from FishReport" >> file_name

afin que vous accoler au fichier.

A partir de votre script Tcl, vous pouvez simplement donner cela comme une commande exec:

http://www.tcl.tk/man/tcl/tutorial/ Tcl26.html

Autres conseils

Je pense que MySQL ne permet pas l'ajout de données à un fichier existant ou écraser un fichier existant pour des raisons de sécurité. A autour de travail pourrait être de sauver resuts dans des fichiers séparés, puis append le fichier en utilisant IO.

Vous pouvez toujours ajouter la sortie de votre script SQL dans un fichier en utilisant >>

Par exemple (pour Sybase):

isql < script.sql >> outputfile.out

Je ne peux pas vous dire ce que l'équivalent est de MySQL, mais le principe devrait être le même.

Sortie cours vont tous à un fichier si votre script SQL est la sortie SQL différentes sélectionne à différents fichiers de sortie, vous aurez besoin de diviser le script vers le haut.

Vous pouvez tout simplement l'ajouter à une variable. Ensuite, utilisez un SELECT avec UNION.

declare t varchar(100);

set @myvar = concat('
    select *  INTO OUTFILE \'',file,'\'
    from (
       select \'',t,'\'
       union all
       SELECT col from tbl where x      
    ) a' 
);
PREPARE stmt1 FROM @myvar;
EXECUTE stmt1;
Deallocate prepare stmt1;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top