Оператор SELECT ... INTO OUTFILE для хранимой процедуры в MySQL - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно экспортировать одну MySQL таблицу в формате .csv.

Для этого я попробовал эту хранимую процедуру , используя SELECT ... INTO OUTFILE оператор предназначен для включения дампа таблицы в файл csv на хосте сервера.

Но я получаю эту ошибку:

Ошибка выполнения процедуры 1064 - В синтаксисе SQL возникла ошибка; обратитесь к руководству, соответствующему вашей MySQL версии сервера, чтобы узнать правильный синтаксис для использования рядом с 'C: \ inetpub \ ftproot \ tm_20200322.csv' в строке 1

Можете ли вы мне помочь?

Мой код ниже.

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

1 Ответ

3 голосов
/ 23 марта 2020

Имя файла должно быть заключено в одинарные кавычки. Кроме того, неясно, почему вам нужно выполнить дважды. Вам также нужно осторожно использовать экранирование \ (есть места, где у вас есть один ко многим, в других - когда вы мизинец).

Это должно делать то, что вы хотите:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...