在MySQL和子查询中使用游标时出错

在MySQL和子查询中使用游标时出错,mysql,cursor,handle,Mysql,Cursor,Handle,我有以下存储过程: DECLARE CURSORITO CURSOR FOR SELECT issues.id FROM issues DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; OPEN CURSORITO; REPEAT FETCH CURSORITO INTO c_id ; IF NOT done THEN -- TOTAL HOURS SELECT SUM(hours) INTO c_To

我有以下存储过程:

DECLARE CURSORITO CURSOR FOR SELECT  issues.id FROM issues

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;

OPEN CURSORITO;

REPEAT
FETCH CURSORITO INTO c_id ; 

IF NOT done THEN
    -- TOTAL HOURS
    SELECT SUM(hours) INTO c_Tot_Horas FROM time_entries WHERE issue_id=c_id;
    INSERT INTO TOTAL (ID,TOT) VALUES c_id,c_Tot_Horas ;
END IF;
UNTIL done END REPEAT;
但是当“Total Hours Querys”没有数据时,进程将退出repeat部分,并将“Done”变量设置为true


我应该怎么做才能完成这个过程,也就是说,绕过所有的光标?

你不需要光标

INSERT INTO total(ID, TOT)
SELECT issue_id, SUM(hours) 
FROM time_entries t
/*optionally you can add*/
INNER JOIN issues i ON t.issue_id = i.id
/*if you need to filter by joining*/
GROUP BY issue_id
光标速度非常慢,如果不需要,请不惜一切代价避免使用它们。

可能是因为SUM(hours)返回
null
。请尝试将其替换为
IFNULL(SUM(hours),0)