Mysql
 sql >> Base de données >  >> RDS >> Mysql

puis-je utiliser une variable pour spécifier OUTFILE dans mysql

Modifier : Enregistrement de données (par exemple, un tableau) dans un fichier sans utiliser de variable (uniquement des valeurs 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;

Maintenant en utilisant la variable

Chaque fois que vous devez utiliser un nom de variable dans sql, vous avez besoin de sql dynamique (qui s'applique uniquement aux procédures stockées, ni aux requêtes sql simples ni aux déclencheurs ou fonctions)

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;

Comme vous aviez les deux ' et " déjà dans votre requête, j'ai donc concaténé votre requête en utilisant " et utilisé \ pour échapper votre " d'origine pour garantir son utilisation en tant que caractère littéral et non utilisé pour la concaténation

Je viens de dire l'utilisation de variable en m². Vous devez d'abord vous assurer que votre requête fonctionne comme l'exemple en haut (sans utiliser de variable)

Conclusion : Si votre requête ci-dessus fonctionne correctement, mon SQL dynamique indiqué fonctionnera également étant donné que vous l'utilisez dans une procédure stockée.