繁体   English   中英

MySQL 中存储过程的 SELECT ... INTO OUTFILE 语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM