游标定义给出错误 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;
块将其包装起来。
我编写了以下代码 - 这是一个更大的存储过程的一部分。
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;
块将其包装起来。