Oracle通过游标来循环读取数据,有三种方式,如下
方式一:使用loop
使用loop循环的时候,一定要加上exit when 游标名称%notfound; 否则会出现死循环,一直执行loop内的代码,最终会一直取到最后一行的数据,导致很多冗余的数据出现!!
create or replace procedure testProc
as
cursor cur
is
select id,name from users;
id integer;
name varchar(100);
Begin
open cur;
loop
fetch cur into id,name;
exit when cur%notfound;
dbms_output.put_line(id||'-'||name);
end loop;
close cur;
Exception
When others then
Rollback;
End;
方式二:使用while
使用while循环的时候,一定要写两个fetch into语句。第一个fetch语句是把游标的第一行记录赋值给相关变量,第二个fetch语句是让游标指向下一条记录。
如果没有第二个语句的话,即为死循环,不停地执行loop内的代码。
create or replace procedure testProc
as
cursor cur
is
select id,name from users;
id integer;
name varchar(100);
Begin
open cur;
fetch cur into id,name;
while cur%found loop
dbms_output.put_line(id||'-'||name);
fetch cur into id,name;
end loop;
close cur;
Exception
When others then
Rollback;
End;
方式三:使用for
create or replace procedure testProc
as
cursor cur
is
select id,name from users;
Begin
for rowdata in cur loop
dbms_output.put_line(rowdata.id||'-'||rowdata.name);
end loop;
Exception
When others then
Rollback;
End;