Edytuj: Zapisywanie danych (np. tabeli) do pliku bez użycia zmiennej (tylko wartości stałe)
-- 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;
Teraz używam zmiennej
Ilekroć musisz użyć nazwy zmiennej w sql, potrzebujesz dynamicznego sql (który ma zastosowanie tylko w procedurach składowanych, ani w prostych zapytaniach sql, ani w wyzwalaczach lub funkcjach)
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;
Ponieważ miałeś oba '
i "
już w zapytaniu, więc połączyłem je za pomocą "
i użył \ do zmiany oryginalnego "
aby upewnić się, że jest używany jako znak dosłowny i nie jest używany do łączenia
Właśnie powiedziałem o użyciu variable
w kw. Najpierw upewnij się, że Twoje zapytanie działa jak przykład na górze (bez używania zmiennej)
Wniosek: Jeśli powyższe zapytanie działa dobrze, to mój powiedziany dynamiczny sql będzie działał równie dobrze, biorąc pod uwagę, że używasz go w jakiejś procedurze składowanej.