Mysql
 sql >> Datenbank >  >> RDS >> Mysql

kann ich eine Variable verwenden, um OUTFILE in mysql anzugeben

Bearbeiten: Speichern von Daten (z. B. einer Tabelle) in einer Datei ohne Verwendung von Variablen (nur konstante Werte)

-- 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;

Jetzt Variable verwenden

Wann immer Sie einen Variablennamen in SQL verwenden müssen, benötigen Sie dynamisches SQL (das nur in gespeicherten Prozeduren anwendbar ist, weder in einfachen SQL-Abfragen noch in Triggern oder Funktionen)

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;

Da hatten Sie beide ' und " bereits in Ihrer Abfrage, also habe ich Ihre Abfrage mit " verkettet und benutzte \, um Ihren ursprünglichen " zu maskieren um sicherzustellen, dass es als wörtliches Zeichen verwendet und nicht zur Verkettung verwendet wird

Ich habe gerade die Verwendung von variable erklärt in SQL. Zuerst sollten Sie sich vergewissern, ob Ihre Abfrage wie oben im Beispiel funktioniert (ohne Variable zu verwenden)

Fazit: Wenn Ihre obige Abfrage gut funktioniert, funktioniert mein gesagtes dynamisches SQL auch, vorausgesetzt, Sie verwenden es in einer gespeicherten Prozedur.