我有疑问
select * from ot.city_vw;
但是当我编写 pl/sql block 来获取数据时
declare
v_data OT.city%rowtype;
CURSOR cur1 is
select * from ot.city_vw;
begin
open cur1;
loop
fetch cur1 into v_data;
dbms_output.put_line(v_data.city_id);
dbms_output.put_line(v_data.city_name);
EXIT WHEN cur1%NOTFOUND;
END LOOP;
CLOSE cur1;
end;
/
最后一张表的数据是下图的两倍:
我的光标有什么问题吗?为什么最后一个数据出现两次?
最佳答案
向上移动EXIT
。
open cur1;
loop
fetch cur1 into v_data;
EXIT WHEN cur1%NOTFOUND; --> here
dbms_output.put_line(v_data.city_id);
dbms_output.put_line(v_data.city_name);
END LOOP;
CLOSE cur1;
或者更好的是,用户光标FOR
循环:
begin
for v_data in (select * from ot.city_vw)
loop
dbms_output.put_line(v_data.city_id);
dbms_output.put_line(v_data.city_name);
end loop;
end;
是不是看起来更简单了? Oracle 会为您完成所有脏活(声明游标变量、打开游标、退出循环、关闭游标)。我建议您尽可能使用它。
关于database - 光标正在返回表中可用的更多数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58320315/