sql >> Base de Datos >  >> RDS >> Mysql

¿Puedo usar una variable para especificar OUTFILE en mysql?

Editar: Guardar datos (por ejemplo, una tabla) en un archivo sin usar variables (solo valores constantes)

-- folder_path could could be like => c:/users/sami
-- choose the directory/folder already available in system
-- and make sure you have access to write the file there

SELECT * INTO OUTFILE 'folder_path/filename.csv'
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
FROM database.tableName;

Ahora usando variable

Siempre que tenga que usar un nombre de variable en sql, necesita sql dinámico (que es aplicable solo en procedimientos almacenados, ni en consultas sql simples ni en activadores o funciones)

SET @OutputPath := 'Users/jo/Documents'; //or any folder_path
SET @fullOutputPath := CONCAT(@OutputPath,'/','filename.csv');
SET @fullOutputPath2 := CONCAT(@OutputPath,'/','filename2.csv');

set @q1 := concat("SELECT * INTO OUTFILE ",@fullOutputPath,
" FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"'
FROM database.tableName");

set @q2 := concat("SELECT * INTO OUTFILE ",@fullOutputPath2,
" FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"'
FROM database.tableName2");

prepare s1 from @q1;
execute s1;deallocate prepare s1;

prepare s1 from @q2;
execute s1;deallocate prepare s1;

Como tenías ambos ' y " en su consulta ya, así que concatené su consulta usando " y usó \ para escapar de su " original para garantizar su uso como carácter literal y no utilizado para la concatenación

Acabo de explicar el uso de variable en sql. Primero, debe asegurarse de que su consulta funcione como ejemplo en la parte superior (sin usar variable)

Conclusión: Si su consulta anterior funciona bien, mi sql dinámico dicho también funcionará dado que lo está utilizando en algún procedimiento almacenado.