这个mysql游标有什么问题,如何更正?
我试图在这里使用一个游标从likecounttable中获取记录,我在一些网站上看到了这种语法,所以我使用了它,但它不起作用您在第一次声明后缺少一个分号,而且,likecounttable是一个表,而不是一个数据类型 因为您试图将两个列值存储到声明的变量中,所以第一行应该更像这样这个mysql游标有什么问题,如何更正?,mysql,cursor,procedure,Mysql,Cursor,Procedure,我试图在这里使用一个游标从likecounttable中获取记录,我在一些网站上看到了这种语法,所以我使用了它,但它不起作用您在第一次声明后缺少一个分号,而且,likecounttable是一个表,而不是一个数据类型 因为您试图将两个列值存储到声明的变量中,所以第一行应该更像这样 CREATE PROCEDURE curLike() BEGIN DECLARE likeRec likecounttable; DECLARE c_likeCount CURS
CREATE PROCEDURE curLike()
BEGIN
DECLARE likeRec likecounttable;
DECLARE c_likeCount CURSOR FOR SELECT l.likeCount, l.qId FROM likecounttable l;
OPEN c_likeCount;
start_loop:LOOP
FETCH c_likeCount IN likeRec
UPDATE qentry SET qentry.likeCount = likeRec.likeCount WHERE qentry.qId=likeRec.qId;
END LOOP;
CLOSE c_likeCount;
END;
在阅读代码之后,如果不向游标添加,可以使用以下sql来简化,这与游标的作用相同
DECLARE likeRec_Count, likeRec_qId INT;
编辑:如果您想要对光标进行完整更新,那么下面的操作也应该这样做
UPDATE qentry JOIN likecounttable l ON l.qId=qentry.qId
SET qentry.likeCount = l.likeCount
;
请澄清您的问题您遇到了什么错误?与您期望它做或不做的相比,它做或不做什么?首先要清楚变量声明和游标语法查询的概念:创建过程curLike BEGIN declare likeRec likecountable declare c_likeCount cursor FOR SELECT l.likeCount,l.qId FROM li。。。错误代码:1064您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第3行“likeCountable DECLARE c_likeCount CURSOR for SELECT l.likeCount,l.qId FROM”附近使用的正确语法——它显示了此错误,实际上我在Oracle中使用过很多游标和所有游标,但在MySQL中这是我第一次使用。请帮助meCheck我的答案是的,这个简单的Sql查询为我解决了问题,谢谢你的查询。
DELIMITER $$
CREATE PROCEDURE curLike()
BEGIN
DECLARE c_likeRec_isdone BOOLEAN DEFAULT FALSE;
DECLARE likeRec_Count, likeRec_qId INT;
DECLARE c_likeCount CURSOR FOR SELECT l.likeCount, l.qId FROM likecounttable l;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET c_likeRec_isdone = TRUE;
OPEN c_likeCount;
loop_likeRecList: LOOP
FETCH c_likeCount INTO likeRec_Count, likeRec_qId;
IF c_likeRec_isdone THEN
SET c_likeRec_isdone = FALSE;
LEAVE loop_likeRecList;
END IF;
UPDATE qentry SET qentry.likeCount = likeRec_Count WHERE qentry.qId=likeRec_qId;
END LOOP loop_likeRecList;
CLOSE c_likeCount;
END;
$$
CREATE PROCEDURE curLike()
BEGIN
DECLARE likeRec_Count, likeRec_qId INT;
DECLARE c_likeCount CURSOR FOR SELECT l.likeCount, l.qId FROM likecounttable l;
OPEN c_likeCount;
start_loop:LOOP
FETCH c_likeCount INTO likeRec_Count,likeRec_qId
UPDATE qentry SET qentry.likeCount = likeRec_Count WHERE qentry.qId=likeRec_qId ;
END LOOP;
CLOSE c_likeCount;
END;