Database 游标正在返回表中可用的更多数据
我有疑问Database 游标正在返回表中可用的更多数据,database,oracle,plsql,oracle11g,toad,Database,Oracle,Plsql,Oracle11g,Toad,我有疑问 select * from ot.city_vw; 数据如下: 但是当我编写pl/sql块来获取数据时 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
select * from ot.city_vw;
数据如下:
但是当我编写pl/sql块来获取数据时
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;
/
最后一个表数据是图片中的两倍:
我的光标有什么问题?为什么最后一个数据会出现两次?向上移动
退出
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为您完成所有的脏工作(声明游标变量、打开游标、退出循环、关闭游标)。我建议你尽可能使用它