游标定义给出错误 1064,但基数 select 工作正常。错误在哪里?

Cursor definition gives error 1064, but the base select works ok. Where's the error?

我编写了以下代码 - 这是一个更大的存储过程的一部分。

DROP PROCEDURE IF EXISTS CGF;
CREATE PROCEDURE CGF( target_id INT )
BEGIN
  DECLARE atual INT;
  Declare  prior INT;
  DECLARE perc_dif DECIMAL(18,2);
  DECLARE dumpdate DATETIME;
  DECLARE done SMALLINT;


  DROP TEMPORARY TABLE IF EXISTS tbl_Result;

  CREATE TEMPORARY TABLE tbl_Result 
  (
    load_date DATETIME,
    likes_fans INT,
    perc_dif DECIMAL(18,2)
  );

  DECLARE csr_alvo CURSOR FOR 
    SELECT 
      th.likes,
      th.dump_date
    FROM 
      target_history th
      INNER JOIN 
        (
        SELECT 
          max(th.dump_date) AS dump_date
        FROM 
          target_history thi
        WHERE 
          th.target_id = thi.target_id
        GROUP BY (CAST(dump_date AS DATE))
        )  t
        ON th.dump_date = t.dump_date;
END;     

如果我注释 DECLARE CURSOR 部分,则程序编译正常并创建。使用的 SELECT 在声明外执行时没有问题。

我做错了什么?根据我从互联网上获得的信息,语法 似乎 是正确的。

您只能在 BEGIN 之后 DECLARE。您可以将您的声明移至其他声明旁边的顶部,或者用 BEGIN ... END; 块将其包装起来。