oracle的游标控制问题

create table test(sid number,sname varchar2(20))


insert into test values(1,'jack');
insert into test values(2,'tom');


declare


cur1 sys_refcursor;
cur2 sys_refcursor;
n varchar2(20);
a number;


begin


open cur1 for 
select sid,sname from test;


for i in 1..10 loop
fetch cur1 into a,n;
dbms_output.put_line('姓名:'||n||'   年龄:'||a);
end loop;


dbms_output.put_line('');
dbms_output.put_line('');
dbms_output.put_line('');
dbms_output.put_line('');
dbms_output.put_line('');


open cur2 for 
select sid,sname from test;


loop
fetch cur2 into a,n;
exit when cur2%notfound;
dbms_output.put_line('姓名:'||n||'   年龄:'||a);
end loop;


end;


把上面的代码全部运行一下会看到下面的结果输出:


  姓名:jack   年龄:1
  姓名:tom   年龄:2
  姓名:tom   年龄:2
  姓名:tom   年龄:2
  姓名:tom   年龄:2
  姓名:tom   年龄:2
  姓名:tom   年龄:2
  姓名:tom   年龄:2
  姓名:tom   年龄:2
  姓名:tom   年龄:2
  
  
  
  
  
  姓名:jack   年龄:1
  姓名:tom   年龄:2


由上面输出可以看出来如果不对循环进行人为的控制那么它会
每循环一次不断的向下取一行数据,如果取到了最后一行,如
果继续循环但是已经到达了最后一行的话,那么它就会重复的
取最后一行的数据,如果要人为的进行控制就需要使用


exit when cur2%notfound;


而且它的位置必须控制在取出数据之后,否则就会多循环一次。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值