简体   繁体   English

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

[英]SELECT ... INTO OUTFILE statement on Stored Procedure in MySQL

I need export one MySQL table in .csv format.我需要以 .csv 格式导出一张 MySQL 表。

To do this I have tried this Stored Procedure using the SELECT ... INTO OUTFILE statement is intended to enable dumping a table to a csv file on the server host.为此,我使用SELECT ... INTO OUTFILE语句尝试了此存储过程,旨在将表转储到服务器主机上的 csv 文件。

But I receive thsi error :但我收到这个错误:

Procedure execution failed 1064 - You have an error in your SQL syntax;过程执行失败 1064 - 您的 SQL 语法有错误; check the manual that corresponds to your MySQL server version for the right syntax to use near 'C:\\inetpub\\ftproot\\tm_20200322.csv' at line 1检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“C:\\inetpub\\ftproot\\tm_20200322.csv”附近使用正确的语法

Can you help me ?你能帮助我吗 ?

My code below.我的代码如下。

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

The file name must be enclosed with single quotes.文件名必须用单引号括起来。 Also, it is unclear why you would need to execute twice.此外,目前还不清楚为什么需要执行两次。 You also need to carefuly use the escaping \\ (there are places where you have one to many, others where one is mising).您还需要小心使用转义\\ (有些地方您有一对多,有些地方缺少一个)。

This should do what you want:这应该做你想做的:

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;

This code generates the following query :此代码生成以下查询

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