--插入杆塔信息
                 insert into t_xl_gtmxb(xh,xlmc,gth,tx,hcg,spzj,qxq,trlb,gxth,gtjcth,jdzzth,jjljth,jjljth1,jjljth2,jjljth3,jjdxth,jjdxth1,fzcdx,fzcdd) values
                       (q_T_XL_GTMXB.Nextval,v_xlmc,v_gth,trim(v_gtxh),v_hcg,trim(v_spzj),trim(v_qxq),trim(v_trlb),trim(v_gxth),trim(v_gtjcth),trim(v_jdzzth),trim(v_dx_jjzhth1),trim(v_dx_jjzhth2),trim(v_dx_tx),trim(v_dx_zj),trim(v_dd_jjzhth1),trim(v_dd_jjzhth2),trim(v_fzcdx),trim(v_fzcdd));
                 v_gth1:=v_gth+1;
                 --取出间隔棒信息
                 open c_ngth;
                 loop
                     fetch c_ngth into v_gth2,v_dj,v_gdc;
                     exit when c_ngth%notfound;
                     v_gthjg:=v_gth || '-' || v_gth2;
                     open c_jgb;
                     loop
                         fetch c_jgb into v_jgbsl;
                     end loop;
                     close c_jgb;
                     --隔行插入档距,高差等数据
                     insert into t_xl_gtmxb(xh,xlmc,gthjg,dj,gc,jjljth,jjljth1,jjljth2,jjljth3,jjdxth,jjdxth1,jgb)
                        values(q_T_XL_GTMXB.Nextval,v_xlmc,v_gthjg,v_dj,v_gdc,v_dx_jjzhth1_cps,v_dx_jjzhth2_cps,v_dx_tx_cps,v_dx_zj_cps,v_dd_jjzhth1_cps,v_dd_jjzhth2_cps,v_jgbsl);
                 end loop;
                 close c_ngth;
                 --当遇见第一个水平转角时存下gthjg
                 if v_spzj is not null then
                       if (v_spzj is not null) and (v_gthjgs is not null) then
                       --存储上一个水平转角到当前一个水平转角之间计算的数据,放到上一个水平转角所在的纪录上
                            if v_nzdc<>0 then
                            v_dbdc:=sqrt(v_dbdc/v_nzdc);
                            end if;
                            update t_xl_gtmxb set nzdc=floor(v_nzdc),dbdc=floor(v_dbdc)
                                  where xlmc=v_xlmc and gthjg=v_gthjgs;
                            v_nzdc:=0;
                            v_dbdc:=0;
                       end if;
                       --存下上一个水平转角的gthjg
                       v_gthjgs:=v_gthjg;
                 end if;
                 --计算耐张段长和代表档距
                 v_nzdc:=v_nzdc+v_dj;
                 v_dbdc:=v_dbdc+power(v_dj,3);
                 if v_mddj<>0 then
                      insert into t_xl_gtmxb(xh,xlmc,dj,nzdc,dbdc) values
                          (q_T_XL_GTMXB.Nextval,v_xlmc,v_mddj,v_mddj,v_mddj);  
                       insert into t_xl_gtmxb(xh,xlmc,xlbh,hcg) values
                            (q_T_XL_GTMXB.Nextval,v_xlmc,v_xlbh,'变构架');              
                 end if;
                 open c_trdzl;
                 loop
                     fetch c_trdzl into v_trdzl;
                     exit when c_trdzl%notfound;
                     --插入接地装置p值
                     update t_xl_gtmxb set jdzzpz=v_trdzl where xlmc=v_xlmc
                        and gth=v_gth;
                 end loop;
                 close c_trdzl;
             end loop;
             close c_gtjbxx;
             --****insert into t_xl_gtmxb_bz(xlmc) values(v_xlmc);
             if sqlcode = 0 then
             commit;
             else
             rollback;
             end if;
     end if;
end pr_gtmxb;
我执行完这个过程后会产生300-400条纪录,需用2-3个小时,而且我这个过程是在小型机上执行的。是不是insert 或update 太多的缘故,他们两谁的影响更大,有没有办法提高速度啊,大家帮忙看看,有好的建议一定给分!!!