我有一个像这样的名为TRY的表....
try(name,sal) values('tony',10000),('david',20000),('rony',30000),('sami',40000)
现在我在一个过程中使用游标通过一个变量来显示salary列的所有值。这样我就试着弄清楚一个游标是否正常,因为我是游标的新手而且我来了要知道光标一个接一个地读取每个选定的行。我正在执行以下代码...
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列的最后一个值重复,即。我重复了最后一个值。
请解决我的问题。谢谢。
答案 0 :(得分:5)
您需要稍微更改一下这个功能,在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