我编写了以下代码,这是一个更大的存储过程的一部分。
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;
块将其封装。