【问题标题】:using cursor last returned row is repeated重复使用游标最后返回的行
【发布时间】:2013-12-11 05:56:01
【问题描述】:

我有一个像这样命名为 TRY 的表......

try(name,sal) values('tony',10000),('david',20000),('rony',30000),('sami',40000)

现在我在一个过程中使用游标来通过一个变量显示薪水列的所有值。这样做我试图确定锄头游标的工作原理,因为我是游标的新手,我已经来了要知道游标会一一获取每个选定的行。我正在执行以下代码...

 delimiter ;;

 create procedure me()

  begin

    declare done int default 0;

    declare var int;

    declare cur cursor for select sal from try;

    declare continue handler for not found set done=1;

  open cur;

    curloop:loop

     if done=1 then

    leave curloop;

     end if;

       fetch cur into var;

       select var;

    end loop;

 close cur;

end;;

使用它我可以正确获取 SAL 列的所有值,但问题是它返回了一个额外的行,该行与 SAL 列的最后一个值重复,即我正在重复最后一个值。

请解决我的问题。在此先感谢。

【问题讨论】:

    标签: mysql cursor


    【解决方案1】:

    你需要稍微改变一下函数,在 FETCH 操作后检查done -

    CREATE PROCEDURE me()
    BEGIN
      DECLARE done int DEFAULT 0;
      DECLARE var int;
      DECLARE cur CURSOR FOR SELECT sal FROM try;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    
      OPEN cur;
    
    curloop:
      LOOP
    
        FETCH cur INTO var;
        IF done THEN
          LEAVE curloop;
        END IF;
    
        SELECT var;
    
      END LOOP;
    
      CLOSE cur;
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 2016-03-28
      • 2020-06-27
      • 2022-11-21
      相关资源
      最近更新 更多