我有一个名为 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 列的最后一个值重复,即我正在重复最后一个值。
请解决我的问题。提前致谢。
最佳答案
您需要稍微更改一下功能,在 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
关于mysql - 使用游标重复最后返回的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511572/