游标正在返回 table 中可用的更多数据
Cursor is returning more data that is available in table
我有疑问
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;
/
最后的table数据来了两次,如下图:
我的光标有什么问题?为什么最后的数据来了两次?
上移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 为您完成所有 dirty 工作(声明游标变量、打开游标、退出循环、关闭游标)。我建议你尽可能使用它。
我有疑问
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;
/
最后的table数据来了两次,如下图:
我的光标有什么问题?为什么最后的数据来了两次?
上移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 为您完成所有 dirty 工作(声明游标变量、打开游标、退出循环、关闭游标)。我建议你尽可能使用它。