在过程中,为什么使用特定于会话的变量来存储字符串查询:
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行
这只是语言的怪癖吗?
答案 0 :(得分:0)
您需要使用SQL标准变量语法 - 所有变量都使用@符号声明/使用。
因此,在您的示例中,如果您使用了:
declare @q text
或,
declare @q nvarchar(4000)
或类似的东西,它可以工作 - 只需遵循SQL规范来使用变量,无论你是在程序中还是传递参数,或者其他任何东西,你应该没问题。