我有以下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/

10-11 03:31