使用过程变量创建服务器端预处理语句 - MySQL

时间:2015-03-15 20:48:58

标签: mysql stored-procedures

在过程中,为什么使用特定于会话的变量来存储字符串查询:

DELIMITER $$
CREATE PROCEDURE `test_prepared_stmt` () BEGIN
    SET @q:="SELECT * FROM t1";
    PREPARE query FROM @q;
    #...
END$$

但不使用过程变量:

DELIMITER $$
CREATE PROCEDURE `test_prepared_stmt` () BEGIN
    DECLARE q TEXT;
    SET q:="SELECT * FROM t1";
    PREPARE query FROM q;
    #...
END$$

而是抛出以下错误?

  

错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在'q;

附近使用正确的语法      

END'在第5行

这只是语言的怪癖吗?

1 个答案:

答案 0 :(得分:0)

您需要使用SQL标准变量语法 - 所有变量都使用@符号声明/使用。

因此,在您的示例中,如果您使用了:

declare @q text

或,

declare @q nvarchar(4000)

或类似的东西,它可以工作 - 只需遵循SQL规范来使用变量,无论你是在程序中还是传递参数,或者其他任何东西,你应该没问题。