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 (.......);
高手现身啊。急

解决方案 »

  1.   

    为什么要游标呢?循环就是很耗费时间的 ,直接虾米的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);
      

  2.   

    同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 没有重复记录) 
    就好
      

  3.   


    想双循环的话也只有你这样的写法
    可以直接sql来
    insert into tb SELECT a.* FROM nsr_base_person a,nsr_base_info b where a.pk_no=b.pk_no