Синтаксическая ошибка при использовании Prepare Statement MySQL - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь создать триггер, который будет создавать файл с данными из БД, и каждый раз файл будет иметь другое имя. Я пытаюсь поместить DateTime, но было бы лучше сделать простой шаг, хотя я не знаю, как, поскольку мы не можем использовать переменные. Было бы лучше, если бы два файла создавались одновременно. Проблема с моим кодом заключается в том, что я получаю сообщение об ошибке, когда использую операторы Prepare / Execute.

Я получаю 'Синтаксическая ошибка возле ПОДГОТОВКИ s1 ...' Что не так?

SET @my_var = 
    CONCAT (
       "SELECT * FROM table_name INTO OUTFILE 'file_path/log-"
       , DATE_FORMAT( NOW(), '%Y%m%d')
       , ".txt'"
    );
PREPARE s1 FROM @my_var;
EXECUTE s1;
DEALLOCATE PREPARE s1;

Я использую MySQL 5.7.26 и PhpMyAdmin.

1 Ответ

0 голосов
/ 28 июня 2019

Я обнаружил, что здесь невозможно .

В текущем разделе руководства MySQL (5.7) D.1 Ограничения для хранимых программ говорится, что

  • Подготовленные SQL операторы (PREPARE, EXECUTE, DEALLOCATE PREPARE) могут использоваться в хранимых процедурах, но не в хранимых функциях или триггерах.Таким образом, хранимые функции и триггеры не могут использовать динамический SQL (где вы строите операторы как строки, а затем выполняете их).
  • Как правило, операторы, не разрешенные в подготовленных операторах SQL, также не разрешены в хранимых программах.Для списка операторов, поддерживаемых как подготовленные операторы.
  • Поскольку локальные переменные находятся в области действия только во время выполнения хранимой программы, ссылки на них недопустимы в подготовленных инструкциях, созданных в хранимой программе.Подготовленная область действия оператора - это текущий сеанс, а не сохраненная программа, поэтому оператор может быть выполнен после завершения программы, после чего переменные больше не будут находиться в области видимости.

Таким образом, вы можете видеть, чтоэто не разрешеноЕсли у кого-то есть альтернатива, пожалуйста, прокомментируйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...