Pregunta

SQL tiene la opción de volcar los datos en un archivo, utilizando la opción INTO OUTFILE, por exmaple

SELECT * from FIshReport INTO OUTFILE './FishyFile'

El problema es que este comando sólo se permite si el archivo no existía antes de él. Se crea el archivo y luego introduce los datos. Entonces, ¿hay alguna manera de añadir datos a un archivo de esta manera?

¿Fue útil?

Solución

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

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. 

, que, en su caso, se modifica para que sea:

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

por lo que sólo tiene que anexar al archivo.

A partir de la secuencia de comandos de Tcl, simplemente podría emitir este como un comando exec:

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

Otros consejos

Creo que MySQL no permite añadir datos a un archivo existente o sobrescribir un archivo existente por razones de seguridad. Un torno al trabajo podría ser para salvar resuts en archivos separados y luego anexar el archivo usando IO.

Se podría añadir siempre 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 debe ser el mismo.

De la producción curso se van todos al mismo archivo de modo que si su secuencia de comandos SQL está emitiendo diversos selecciona SQL a diferentes archivos de salida a continuación, que había necesidad de dividir la secuencia de comandos para arriba.

Sólo podría añadir a una variable. A continuación, utilice 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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top