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;
而且它的位置必须控制在取出数据之后,否则就会多循环一次。
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;
而且它的位置必须控制在取出数据之后,否则就会多循环一次。