Mysql
 sql >> Database >  >> RDS >> Mysql

posso usare una variabile per specificare OUTFILE in mysql

Modifica: Salvataggio di dati (ad es. una tabella) in un file senza utilizzare variabili (solo valori costanti)

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

Ora usando la variabile

Ogni volta che devi usare un nome di variabile in sql, hai bisogno di sql dinamico (che è applicabile solo nelle stored procedure, né nelle semplici query sql né nei trigger o nelle funzioni)

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;

Come avevi entrambi ' e " già nella tua query, quindi ho concatenato la tua query utilizzando " e usato \ per sfuggire al tuo " originale per garantirne l'uso come carattere letterale e non utilizzato per la concatenazione

Ho appena detto l'uso di variable in sql. Per prima cosa dovresti assicurarti che la tua query funzioni come l'esempio in alto (senza usare variabile)

Conclusione: Se la tua query precedente funziona correttamente, anche il mio sql dinamico detto funzionerà dato che lo stai utilizzando in alcune stored procedure.