2011-01-20 7 views
7

SQL ha la possibilità di scaricare i dati in un file, utilizzando l'opzione INTO OUTFILE, per exmapleCome per aggiungere dati da SQL a un file esistente

SELECT * from FIshReport INTO OUTFILE './FishyFile' 

Il problema è, questo comando è consentito solo se il il file non esisteva prima di esso. Crea il file e quindi inserisce i dati. Quindi, c'è un modo per aggiungere dati a un file in questo modo?

+3

di quale fornitore DB stiamo parlando qui? –

+0

Sto usando MySql DB –

risposta

4

come pagina MySQL su sintassi SELEZIONA suggerisce:

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

l'alternativa a questo è 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 tuo caso, sarebbe essere modificato per essere:

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

in modo che semplicemente un passare al file.

dallo script Tcl, si potrebbe semplicemente emettere questo come un comando exec:

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

0

Si può sempre aggiungere l'output dallo script SQL in un file utilizzando >>

Per esempio (per Sybase):

isql <script.sql>> outputfile.out 

Non si può dire che cosa l'equivalente è per MySQL, ma il principio dovrebbe essere lo stesso.

Ovviamente l'output andrà in un solo file, quindi se lo script SQL sta generando vari selezioni SQL su diversi file di output, è necessario dividere lo script.

+0

che non funziona davvero .. Sto usando MySql da uno script tcl, quindi non stampa il risultato sullo schermo ogni volta che viene emesso un comando. Ma grazie :) –

1

Credo che MySQL non consente aggiungendo dati in un file esistente o sovrascrivere un file esistente per ragioni di sicurezza. Una soluzione potrebbe essere quella di salvare resuts in file separati e quindi aggiungere l'utilizzo del file IO.

+1

questo è quello che sto facendo adesso, speravo solo che ci fosse una soluzione migliore :) –

+0

purtroppo non ce n'è uno :( –

0

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; 
Problemi correlati