MySQL (5.6.14) 过程中的 Declare 和 Temporary Table 语法错误

MySQL (5.6.14) Syntax error with Declare and Temporary Table inside Procedure

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

这给出了一个错误:"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE i INT DEFAULT 0; END' at line 8"

现在,如果我删除临时 Table,它运行正常。

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 ;    

什么可能导致此语法错误?

尝试:

DELIMITER $$

CREATE PROCEDURE Do_Stuff()
LANGUAGE SQL
BEGIN
   DECLARE i INT DEFAULT 0;
   CREATE TEMPORARY TABLE IF NOT EXISTS users_temp AS (
      SELECT id FROM users);
   -- DECLARE i INT DEFAULT 0;
END$$

DELIMITER ;

来自docs

DECLARE is permitted only inside a BEGIN ... END compound statement and must be at its start, before any other statements.

移到CREATE TEMPORARY TABLE之前。