Frage

hat SQL die Möglichkeit, Daten in eine Datei auszugeben, die INTO OUTFILE Option, für exmaple

SELECT * from FIshReport INTO OUTFILE './FishyFile'

Das Problem ist, wird dieser Befehl nur zulässig, wenn die Datei nicht, bevor es noch nicht gab. Es erstellt die Datei und gibt dann die Daten. So ist es eine Möglichkeit, Daten in eine Datei auf diese Weise anhängen?

War es hilfreich?

Lösung

Wie die MySQL-Seite auf SELECT Syntax schlägt vor:

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

Die Alternative dazu ist die SELECT aus dem MySQL-Client zu erteilen:

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. 

, die in Ihrem Fall würde modifiziert werden, um sein:

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

so, dass man einfach Append in die Datei.

Von Ihrem Tcl-Skript, können Sie einfach ausgeben dies als exec Befehl:

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

Andere Tipps

ich denke, MySQL erlaubt keine Daten an eine vorhandene Datei anhängen oder eine vorhandene Datei aus Sicherheitsgründen zu überschreiben. Eine Arbeit um sein könnte resuts in separaten Dateien zu speichern und dann append die Verwendung der Datei IO.

Sie können immer die Ausgabe von SQL-Skript anhängen zu einer Datei mit >>

Zum Beispiel (für Sybase):

isql < script.sql >> outputfile.out

Ich kann Ihnen nicht sagen, was das Äquivalent für MySQL ist aber das Prinzip sollte gleich sein.

Natürlich Ausgabe werden alle gehen in eine Datei so, wenn Ihr SQL-Skript verschiedene SQL wählt an verschiedene Ausgabedateien ausgibt, dann müssen Sie würde das Skript aufzuteilen.

Man könnte hinzufügen, nur um es zu einer Variablen. Verwenden Sie dann eine SELECT mit 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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top