gpt4 book ai didi

mysql - 在存储过程中使用游标

转载 作者:行者123 更新时间:2023-11-29 16:18:36 24 4
gpt4 key购买 nike

我正在尝试创建一个存储过程,其中包含一个游标,并每天根据另一个表的数据填充我的一个表。

我认为我在语法上做错了,我已经用光标编写了一个简单的存储过程,它工作完全正确,但是当它变得更复杂一点时,它就不再工作了。我得到了

Error Code: 1064. 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 brandId int ;' at line 1.

请注意,我使用的是 Mysql 5.7,并且是在 phpmMyAdmin 创建的。

CREATE PROCEDURE ّFillCommentGrowth()
BEGIN
DECLARE brandId int;
DECLARE todayComment int ;
DECLARE brandCount int ;
DECLARE yesterdayComment int;
DECLARE crs CURSOR for SELECT id from brands;
SET brandCount = (SELECT count(*) from brands);
open crs;
WHILE brandCount > 0 DO
FETCH crs into brandId ;
set todayComment = (select IFNULL((select count(*) from comments as c where date(c.created_at) = date(subdate(NOW(),1)) and c.brand_id = brandId ),0));
set yesterdayComment = (select IFNULL((select commentAmount from commentsGrowth where moment = date(subdate(NOW(),2)) and brand_Ref= brandId),0));
INSERT INTO commentsGrowth
(
brand_Ref,
commentAmount,
diffrenceByYesterday,
degree,
AmountPercent,
moment)
VALUES
(brandId ,
todayComment,
(todayComment - yesterdayComment ) ,
(((ATAN(todayComment - yesterdayComment )*180))/PI()),
(degree*(1.1)),
date(subdate(NOW(),1)));
SET brandCount = brandCount - 1;
END WHILE;
close crs;
END

最佳答案

您收到的错误与光标无关。您需要更改标准分号 (;) 中的 DELIMITER。例如

DELIMITER //
CREATE PROCEDURE GetAllProducts()
BEGIN
SELECT * FROM products;
END //
DELIMITER ;

DELIMITER 语句将标准分隔符分号 (;) 更改为另一个。在这种情况下,分隔符从分号(;)更改为双斜杠//。为什么我们必须更改分隔符?因为我们希望将存储过程作为一个整体传递给服务器而不是让mysql工具一次解释每一条语句。在 END 关键字之后,我们使用分隔符//来指示存储过程的结束。最后一个命令 (DELIMITER;) 将分隔符更改回分号 (;)。

关于mysql - 在存储过程中使用游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54644151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com