使用Prepare Statement MySQL时的语法错误

时间:2019-06-27 18:48:05

标签: mysql triggers phpmyadmin prepared-statement

我正在尝试创建一个触发器,该触发器将使用数据库中的数据创建一个文件,并且该文件每次都具有不同的名称。我正在尝试放置DateTime,但简单的增量会更好,尽管我不知道如何,因为我们不能使用任何变量。最好同时创建两个文件。我的代码的问题是,当我使用Prepare / Execute语句时出现错误。

我收到“ PREPARE 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 :(得分:0)

我发现无法进行here

当前的MySQL(5.7)手册D.1对存储程序的限制指出

    SQL预准备语句(PREPARE,EXECUTE,DEALLOCATE PREPARE)可以在存储过程中使用,但不能用于存储函数或触发器。因此,存储的函数和触发器不能使用动态SQL(将语句构造为字符串然后执行它们)。
  • 通常,在SQL预准备语句中不允许的语句在存储程序中也不允许。有关作为预备语句支持的语句列表。
  • 由于局部变量仅在执行存储程序期间处于作用域内,因此在存储程序内创建的准备好的语句中不允许引用它们。准备好的语句作用域是当前会话,而不是存储的程序,因此该语句可以在程序结束后执行,此时变量将不再在作用域内。

因此您可以看到它是不允许的。如果有人有其他选择,请发表评论。