[英]SELECT ... INTO OUTFILE statement on Stored Procedure in MySQL
我需要以 .csv 格式导出一张 MySQL 表。
为此,我使用SELECT ... INTO OUTFILE语句尝试了此存储过程,旨在将表转储到服务器主机上的 csv 文件。
但我收到这个错误:
过程执行失败 1064 - 您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“C:\\inetpub\\ftproot\\tm_20200322.csv”附近使用正确的语法
你能帮助我吗 ?
我的代码如下。
BEGIN
SET @tbl = DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 DAY), '%Y%m%d');
SET @s = CONCAT('C:\\inetpub\\ftproot\\\tm_', @tbl, '.csv');
PREPARE stmt FROM @s;
EXECUTE stmt;
SET @s = CONCAT('SELECT * FROM `dotable` INTO OUTFILE @s FIELDS TERMINATED BY ";" LINES TERMINATED BY "\n"');
PREPARE stmt FROM @s;
EXECUTE stmt;
END
文件名必须用单引号括起来。 此外,目前还不清楚为什么需要执行两次。 您还需要小心使用转义\\
(有些地方您有一对多,有些地方缺少一个)。
这应该做你想做的:
SET @tbl = DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 DAY), '%Y%m%d');
SET @s = CONCAT('C:\\inetpub\\ftproot\\tm_', @tbl, '.csv');
SET @s = CONCAT('SELECT * FROM `dotable` INTO OUTFILE ''', @s, ''' FIELDS TERMINATED BY ";" LINES TERMINATED BY "\\n"');
PREPARE stmt FROM @s;
EXECUTE stmt;
此代码生成以下查询:
SELECT * FROM `dotable` INTO OUTFILE 'C:\inetpub\ftproot\tm_20200322.csv' FIELDS TERMINATED BY ";" LINES TERMINATED BY "\n"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.