mysql cursor fetch无法取出值的问题

本文介绍了一种MySQL存储过程中的游标问题:当游标定义包含主键时,如果不为表定义别名,则fetch取出的主键id值始终为0。文章提供了具体的存储过程示例,并分享了解决方案。

现遇到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 ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值