--插入杆塔信息
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 太多的缘故,他们两谁的影响更大,有没有办法提高速度啊,大家帮忙看看,有好的建议一定给分!!!
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 太多的缘故,他们两谁的影响更大,有没有办法提高速度啊,大家帮忙看看,有好的建议一定给分!!!
这样存储过程看起来也会简洁很多。
减少游标数量。