Редактиране: Записване на данни (напр. таблица) във файл без използване на променлива (само константни стойности)
-- 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;
Сега използвате променлива
Всеки път, когато трябва да използвате име на променлива в sql, имате нужда от динамичен sql (което е приложимо само в съхранените процедури, нито в проста sql заявка, нито в тригери или функции)
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;
Тъй като имахте и двете '
и "
във вашата заявка вече, така че свързах заявката ви с помощта на "
и използва \, за да избяга от оригиналния ви "
за да се гарантира използването му като буквален символ и не се използва за конкатенация
Току-що казах използването на variable
в sql. Първо трябва да се уверите, че вашата заявка работи като пример в горната част (без използване на променлива)
Заключение: Ако вашата заявка по-горе работи добре, тогава казаният от мен динамичен sql ще работи също така, като се има предвид, че го използвате в някаква съхранена процедура.