欢迎投稿

今日深度:

plsql游标最后一行重复的问题,plsql游标一行重复

plsql游标最后一行重复的问题,plsql游标一行重复


大家仔细看一下,下面第一个存储过程,test01,有没问题? 看似没问题,其实会造成重复行,test02将exit when的语句放到合适的位置上来。就不会出现最后一行重复打印的问题。

create or replace procedure test01 as   cursor cursor1 is     select * from v$session where rownum <= 5;   record1 cursor1%rowtype; begin   DBMS_OUTPUT.ENABLE(buffer_size => null);   open cursor1;   loop     fetch cursor1 into record1;     dbms_output.put_line(record1.sid);     exit when cursor1%notfound;   end loop;   close cursor1; end;
----------------------------------------------------------------------- create or replace procedure test02 as   cursor cursor1 is     select * from v$session where rownum <= 5;   record1 cursor1%rowtype; begin   DBMS_OUTPUT.ENABLE(buffer_size => null);   open cursor1;   loop     fetch cursor1 into record1;     exit when cursor1%notfound;     dbms_output.put_line(record1.sid);   end loop;   close cursor1; end;



plsql中如果我定义一个游标,然后打开这个游标,然后loop循环把查询出来的数据全部插入自己定义的表中

open那不会浪费太多时间。需要的时间就是两部分。
1.定义游标,获取结果集的时候。---这个时间主要看你的sql查询需要多长时间。
2.Loop的时候。----这个就是运行的时间了。

不过建议大量数据的话不要用游标来处理。
游标的处理速度是很慢的。效率比较低。最好能做批量处理。

我以前用游标做过数据处理,我那个业务逻辑比较复杂,每小时大概只能处理几十万数据。效率太低了。后来我都改成多步骤,用insert into select 。。from 这类的写法去处理,能差百八十倍的速度。
 

sqlserver存储过程中使用游标,查询结果没有第一条数据,但循环次数是对的,不过后面两条数据重复,教

将fetch next from mycursor into @i,@name
放在while循环体的最后即可,即:
while(@fetch_status=0)
begin
print 'id: '+@i+ ' name: '+@name
fetch next from mycursor into @i,@name
end
这样应该就可以了。
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3347.html NewsArticle plsql游标最后一行重复的问题,plsql游标一行重复 大家仔细看一下,下面第一个存储过程,test01,有没问题?看没问题,其实会造成重复行,test02将exit when的语句放到合适的位置上来。...
评论暂时关闭