2011-01-20 19 views
7

SQL tiene la opción de volcar los datos en un archivo, utilizando la opción INTO OUTFILE, por exmapleCómo anexar datos de SQL a un archivo existente

SELECT * from FIshReport INTO OUTFILE './FishyFile' 

El problema es que este comando sólo se permite si el el archivo no existía antes. Crea el archivo y luego ingresa los datos. Entonces, ¿hay alguna manera de anexar datos a un archivo de esta manera?

+3

de qué proveedor DB estamos hablando aquí? –

+0

Estoy usando MySql DB –

Respuesta

4

como la página de MySQL en la sintaxis SELECT sugiere:

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

la alternativa a esto es a emitir la instrucción SELECT desde el cliente de 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. 

la que, en su caso, lo haría ser modificado para ser:

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

para que usted simplemente un pegar al archivo.

Desde su script Tcl, simplemente podría emitir este como un comando exec:

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

0

Siempre se puede añadir la salida de su secuencia de comandos SQL en un archivo utilizando >>

Por ejemplo (para Sybase):

isql <script.sql>> outputfile.out 

no se puede decir lo que es el equivalente de MySQL, pero el principio debería ser el mismo.

Por supuesto, la salida irá a un archivo, por lo tanto, si su script SQL está produciendo varias selecciones SQL para diferentes archivos de salida, entonces necesitaría dividir el script.

+0

que realmente no funciona ... Estoy usando MySql desde un script tcl, por lo que no imprime el resultado en la pantalla cada vez que se emite un comando. Pero gracias :) –

1

Creo que MySQL no permite añadir datos a un archivo existente o sobrescribir un archivo existente por razones de seguridad. Una solución alternativa podría ser guardar los resuts en archivos separados y luego agregar el archivo usando IO.

+1

esto es lo que estoy haciendo ahora, solo esperaba que hubiera una mejor solución :) –

+0

desafortunadamente no hay uno :( –

0

Puede agregarlo a una variable. Luego use 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; 
Cuestiones relacionadas