Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

posso usar uma variável para especificar OUTFILE no mysql


Editar: Salvando dados (por exemplo, uma tabela) em arquivo sem usar variável (apenas 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;

Agora usando variável

Sempre que você precisa usar um nome de variável em sql, você precisa de sql dinâmico (que é aplicável apenas em procedimentos armazenados, nem em consulta sql simples nem em gatilhos ou funções)
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 você tinha ambos ' e " já na sua consulta, então concatenei sua consulta usando " e usei \ para escapar do seu " original para garantir seu uso como um caractere literal e não usado para concatenação

Acabei de falar sobre o uso de variable em sql. Primeiro, você deve verificar se sua consulta funciona como o exemplo na parte superior (sem usar variável)

Conclusão: Se sua consulta acima funcionar bem, meu sql dinâmico informado também funcionará, já que você o está usando em algum procedimento armazenado.