sql >> Databáze >  >> RDS >> Mysql

mohu použít proměnnou k určení OUTFILE v mysql

Upravit: Ukládání dat (např. tabulky) do souboru bez použití proměnné (pouze konstantní hodnoty)

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

Nyní pomocí proměnné

Kdykoli musíte použít název proměnné v sql, potřebujete dynamické sql (které lze použít pouze v uložených procedurách, ani v jednoduchém dotazu sql, ani v triggerech nebo funkcích)

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;

Jak jste měli oba ' a " již ve vašem dotazu, takže jsem váš dotaz zřetězil pomocí " a použil \ k opuštění původního " aby bylo zajištěno jeho použití jako doslovného znaku a nikoli pro zřetězení

Právě jsem řekl použití variable v sql. Nejprve byste se měli ujistit, zda váš dotaz funguje jako příklad nahoře (bez použití proměnné)

Závěr: Pokud váš výše uvedený dotaz funguje dobře, můj sdělený dynamický sql bude fungovat také, protože jej používáte v nějaké uložené proceduře.



  1. Existuje jiný způsob implementace tohoto programu bez použití smyčky vnořené while?

  2. Je možné migrovat z Realmu do Sqlite?

  3. Změňte výstupní formát pro výsledky příkazového řádku MySQL na CSV

  4. Jak zkrátíte všechny tabulky v databázi pomocí TSQL?