Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个mysql游标有什么问题,如何更正?_Mysql_Cursor_Procedure - Fatal编程技术网

这个mysql游标有什么问题,如何更正?

这个mysql游标有什么问题,如何更正?,mysql,cursor,procedure,Mysql,Cursor,Procedure,我试图在这里使用一个游标从likecounttable中获取记录,我在一些网站上看到了这种语法,所以我使用了它,但它不起作用您在第一次声明后缺少一个分号,而且,likecounttable是一个表,而不是一个数据类型 因为您试图将两个列值存储到声明的变量中,所以第一行应该更像这样 CREATE PROCEDURE curLike() BEGIN DECLARE likeRec likecounttable; DECLARE c_likeCount CURS

我试图在这里使用一个游标从likecounttable中获取记录,我在一些网站上看到了这种语法,所以我使用了它,但它不起作用

您在第一次声明后缺少一个分号,而且,likecounttable是一个表,而不是一个数据类型

因为您试图将两个列值存储到声明的变量中,所以第一行应该更像这样

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;