存储过程问题

dingli123 2010-07-15 03:53:59
create or replace procedure proc_nsr_jbxx
is

swglm number;

CURSOR cur IS SELECT * FROM nsr_base_info;
CURSOR cur_person IS SELECT * FROM nsr_base_person t where t.pk_no=swglm;


begin

FOR i in cur LOOP

swglm := i.pk_no

for j in cur_person

insert into values(.....);
end loop;

end loop;
end;

我是通过第一个循环,把swglm取得,根据swglm获得cur_person游标,第二个循环,insert表数据
这样的速度太慢了。。请问这么在第一个循环(8000条记录)时把swglm记录下来,然后传给cur_person 这个游标的sql语句,CURSOR cur_person IS SELECT * FROM nsr_base_person t where t.pk_no=swglm;where t.pk_no in (.......);
高手现身啊。急
...全文
71 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
牛叔 2010-07-16
  • 打赏
  • 举报
回复
考虑性能。。。
心中的彩虹 2010-07-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 dingli123 的回复:]
create or replace procedure proc_nsr_jbxx
is

swglm number;

CURSOR cur IS SELECT * FROM nsr_base_info;
CURSOR cur_person IS SELECT * FROM nsr_base_person t where t.pk_no=swglm;


begin
……
[/Quote]

想双循环的话也只有你这样的写法
可以直接sql来
insert into tb SELECT a.* FROM nsr_base_person a,nsr_base_info b where a.pk_no=b.pk_no
yu15tian 2010-07-15
  • 打赏
  • 举报
回复
同1楼,为什么要用游标呢?就是用游标,你也不必嵌套,直接
CURSOR cur_person IS SELECT t.* FROM nsr_base_person t,nsr_base_info i where t.pk_no=i.pk_no; --(确保 I.PK_NO 没有重复记录)
就好
vber1010 2010-07-15
  • 打赏
  • 举报
回复
为什么要游标呢?循环就是很耗费时间的 ,直接虾米的sql不就可以了?
insert into T select * from nsr_base_person t2 where exists (select null from nsr_base_info t1 where t1.pk_no=t2.pk_no);

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧