Come aggiungere dati da SQL a un file esistente
-
13-10-2019 - |
Domanda
SQL ha la possibilità di scaricare i dati in un file, utilizzando l'opzione INTO OUTFILE, per exmaple
SELECT * from FIshReport INTO OUTFILE './FishyFile'
Il problema è che questo comando è consentito solo se il file non esisteva prima di esso. Si crea il file e quindi inserisce i dati. Quindi, c'è un modo per aggiungere dati in un file in questo modo?
Soluzione
come pagina MySQL su sintassi SELEZIONA suggerisce:
http://dev.mysql.com/doc/refman/ 5.0 / it / select.html
L'alternativa a questo è quello di rilasciare SELECT dal client di 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.
, che, nel suo caso, sarebbe stato modificato per essere:
mysql -e "SELECT * from FishReport" >> file_name
in modo che semplicemente accodamento al file.
Dal vostro script Tcl, si potrebbe semplicemente emettere questo come un comando exec:
Altri suggerimenti
Credo che MySQL non consente aggiungendo dati in un file esistente o sovrascrivere un file esistente per ragioni di sicurezza. Un giro per lavoro potrebbe essere per salvare resuts in file separati e quindi aggiungere il file utilizzando IO.
Si può sempre aggiungere l'output dallo script SQL in un file utilizzando >>
Per esempio (per Sybase):
isql < script.sql >> outputfile.out
non posso dire che cosa l'equivalente è per MySQL, ma il principio dovrebbe essere lo stesso.
di uscita Naturalmente andranno tutti in un unico file, quindi se il vostro script SQL è l'output di varie seleziona SQL al file di output diversi, allora si avrebbe bisogno di suddividere lo script in su.
Si potrebbe semplicemente aggiungerlo a una variabile. Quindi utilizzare un SELECT con 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;