Cómo añadir datos de SQL a un archivo existente
-
13-10-2019 - |
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?
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:
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;