游标是变量,声明游标时一定要放在执行语句前面,和其它变量放在一起。
还有点小问题,在实际中游标多执行了一次
drop PROCEDURE if EXISTS get_label_ids_by_task_and_category;
DELIMITER $
CREATE DEFINER=`health`@`%` PROCEDURE `get_label_ids_by_task_and_category`(IN taskId bigint(20), IN seriesInstanceUid varchar(100))
BEGIN
declare versionId bigint(20) unsigned;
declare modelId bigint(20) unsigned;
declare s int default 0;
declare categoryName varchar(60);
declare labelIds varchar(60);
DECLARE cur CURSOR FOR
select cg.name, cg.label_ids from dev_label_category_info cg where cg.model_id = modelId;
declare continue handler for not found set s = 1;
select t.version_id into versionId from task_info t where t.id = taskId;
select mv.model_id into modelId from dev_model_version_info mv where mv.id = versionId;
open cur;
while s <> 1 DO
if s <> 1 then
fetch cur into categoryName, labelIds;
select categoryName, labelIds;
end if;
end while;
close cur;
END $
DELIMITER;