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.