oracle的游标控制问题

来源:互联网 发布:知乎精神 编辑:程序博客网 时间:2024/05/16 01:54
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;


而且它的位置必须控制在取出数据之后,否则就会多循环一次。
原创粉丝点击