我可以使用变量在mysql中指定OUTFILE

joh*_*wie 14 mysql sql variables

有没有办法做以下的事情?这不起作用,但显示我想做的事情

SET @OutputPath = '/Users/jo/Documents'
SET @fullOutputPath = CONCAT(@OutputPath,'/','filename.csv')
SET @fullOutputPath2 = CONCAT(@OutputPath,'/','filename2.csv')

SELECT * INTO OUTFILE @fullOutputPath
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
FROM database.tableName;

SELECT * INTO OUTFILE @fullOutputPath2
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
FROM database.tableName2;
Run Code Online (Sandbox Code Playgroud)

Sam*_*ami 27

编辑:将数据(例如表格)保存到文件中而不使用变量(仅限常量值)

-- 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;
Run Code Online (Sandbox Code Playgroud)

现在使用变量

无论何时必须在sql中使用变量名,都需要动态sql(仅适用于存储过程,既不适用于简单的sql查询,也不适用于触发器或函数)

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;
Run Code Online (Sandbox Code Playgroud)

当你有两个',并"在查询了,所以我用串联您的查询"和使用\逃避你原来"以确保其作为文字字符使用,不能用于级联

我只是告诉variable在sql中使用.首先您应该确保您的查询在顶部是否像示例一样工作(不使用变量)

结论:如果您的上述查询工作正常,那么我告诉动态sql也可以正常工作,因为您在某些存储过程中使用它.


Sha*_*oor -1

你不能在 mysql CLI 中执行此操作,但以这种方式它可以工作

mysql -e "SELECT * FROM database.tableName;" -u user -p database > filename.csv
Run Code Online (Sandbox Code Playgroud)