现遇到mysql中使用游标时在fetch取出记录的主键id值始终为0(如下存储过程中已被注释的代码– select id),且独立执行cursor定义语句是有结果的。经过试验得出如下结论:
cursor定义时如果取出列中包含主键id,必须为表定义别名,否则fetch出值为0;非主键列未发现此问题。特此记录以备忘~
PS:Server version: 5.6.24-log MySQL Community Server (GPL)
DROP PROCEDURE IF EXISTS `pro_update_plan_step_id`;
DELIMITER ;;
CREATE PROCEDURE `pro_update_plan_step_id`(in in_plan_id varchar(36), in in_update_userid varchar(50), out o_count int)
BEGIN
DECLARE count INT DEFAULT 1;
DECLARE finished BOOLEAN DEFAULT FALSE;
DECLARE id INT DEFAULT 0;
DECLARE cur CURSOR FOR
SELECT s.id FROM at_test_plan_step s
WHERE s.plan_id = in_plan_id AND s.is_valid = 1
ORDER BY s.step_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;
OPEN cur;
curloop: LOOP
FETCH cur INTO id;
-- select id;
IF finished THEN
SET finished = FALSE;
LEAVE curloop;
END IF;
UPDATE at_test_plan_step s SET s.step_id = count,
s.update_userid = in_update_userid, s.update_time = now()
WHERE s.id = id;
SET count = count + 1;
END LOOP curloop;
CLOSE cur;
SET o_count = count;
END
;;
DELIMITER ;