我有以下SQL过程:
DELIMITER $$
CREATE PROCEDURE Do_Stuff()
LANGUAGE SQL
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS users_temp AS (
SELECT id FROM users);
DECLARE i INT DEFAULT 0;
END;
$$
DELIMITER ;
这会产生一个错误:“您的SQL语法有错误;请检查对应于MySQL服务器版本的手册,以获得在第8行的“DECLARE i INT DEFAULT 0;END”附近使用的正确语法。”
现在,如果我删除临时表,它运行良好。
DELIMITER $$
CREATE PROCEDURE Do_Stuff()
LANGUAGE SQL
BEGIN
DECLARE i INT DEFAULT 0;
END;
$$
DELIMITER ;
另外,如果我在过程中有除Declare之外的其他语句,它也可以正常运行。
DELIMITER $$
CREATE PROCEDURE Do_Stuff()
LANGUAGE SQL
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS users_temp AS (
SELECT id FROM users);
SELECT * FROM users;
END;
$$
DELIMITER ;
是什么导致了这个语法错误?
最佳答案
从docs开始:DECLARE
只允许在BEGIN ... END
复合语句中使用,并且必须在其开始处,在任何其他语句之前。
在CREATE TEMPORARY TABLE
之前移动它。
关于mysql - 程序内部包含声明和临时表的MySQL(5.6.14)语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36578517/