今天存储过程运行,遇到个情况,就是在测试机上运行ok,但是在生产机上错误,就是yy ty应该是0,但是却有数据,后来经分析,需要在存储过程中每次游标,需要初始化yy ty
存储过程的赋值:= yy:=null;
create or replace procedure proc_cqjysj(v_ny in varchar2) is
ym date; /*月末*/
yc date;/*月初*/
sumscts number(10,2);
sumscsj number(10,2);
sumyy number(14,2);
sumty number(14,2);
sumrcq number(12,4);
sumrcy number(12,4);
sumrcy1 number(12,4);
sumrcs number(12,4);
sumqw number(12,1);
sumhw number(12,1);
qwcount number;
hwcount number;
tmpwell_id varchar(10);
sumyyscts number(10,2);
yy number(12,2);
ty number(12,2);
qw number(8,1);
hw number(8,1);
cursor cur_cqj_well is select well_id from well_source where jb in('numAoUFXve','iXKgATiYWV') ;
begin
SELECT last_day(to_date(v_ny,'yyyy-MM')) into ym FROM dual;
SELECT last_day(add_months(to_date(v_ny,'yyyy-MM'), -1)) + 1 into yc FROM dual;
DBMS_OUTPUT.PUT_LINE(ym);
DBMS_OUTPUT.PUT_LINE(yc);
delete from cqjysj_1 where ny=v_ny;
open cur_cqj_well;
loop
fetch cur_cqj_well into tmpwell_id ;
EXIT WHEN cur_cqj_well%NOTFOUND;
select count(*) sumscts,sum(scsj) sumscsj,sum(rcq) sumrcq,
sum(rcy) sumrcy,sum(rcs) sumrcs,sum(rcy1) sumrcy1
into sumscts,sumscsj,sumrcq,sumrcy,sumrcs,sumrcy1
from cqj_daily_1 a
where rq>=yc and rq<=ym
and well_id = tmpwell_id and kgzt=1;
select sum(yy) sumyy,sum(ty) sumty,count(*)
into sumyy,sumty,sumyyscts
from cqj_daily_1 a
where rq>=yc and rq<=ym
and well_id = tmpwell_id ;
select count(*) qwcount, sum(qw) sumqw into qwcount ,sumqw from cqj_daily_1 a
where rq>=yc and rq<=ym
and well_id = tmpwell_id and kgzt=1 and qw is not null;
select count(*) hwcount , sum(hw) sumhw into hwcount ,sumhw from cqj_daily_1 a
where rq>=yc and rq<=ym
and well_id = tmpwell_id and kgzt=1 and hw is not null;
if sumscts >0 then
if sumyyscts >0 then
select (sumyy/sumyyscts) into yy from dual;
select (sumty / sumyyscts) into ty from dual;
end if;
if qwcount>0 then
select (sumqw / qwcount) into qw from dual;
end if;
if hwcount >0 then
select (sumhw / hwcount) into hw from dual;
end if;
DBMS_OUTPUT.PUT_LINE(tmpwell_id);
DBMS_OUTPUT.PUT_LINE(sumscts);
DBMS_OUTPUT.PUT_LINE(sumscsj);
DBMS_OUTPUT.PUT_LINE(sumyy);
DBMS_OUTPUT.PUT_LINE(sumty);
DBMS_OUTPUT.PUT_LINE(sumrcq);
DBMS_OUTPUT.PUT_LINE(sumqw);
DBMS_OUTPUT.PUT_LINE(qwcount);
DBMS_OUTPUT.PUT_LINE(sumhw);
DBMS_OUTPUT.PUT_LINE(hwcount);
DBMS_OUTPUT.PUT_LINE(yy);
DBMS_OUTPUT.PUT_LINE(ty);
DBMS_OUTPUT.PUT_LINE(qw);
DBMS_OUTPUT.PUT_LINE(hw);
insert into cqjysj_1(well_id,ny,scsj,scts,yy,ty,ycq,shbz,qw,hw,ycs,ycy,ycy1)
values(tmpwell_id,v_ny,sumscsj,sumscts,yy,ty,sumrcq,'0',qw,hw,sumrcs,sumrcy,sumrcy1);
else
yy:=null;
ty:=null;
if sumyyscts >0 then
select (sumyy/sumyyscts) into yy from dual;
select (sumty / sumyyscts) into ty from dual;
end if;
if yy is null then
select 0 into yy from dual;
end if;
if ty is null then
select 0 into ty from dual;
end if;
insert into cqjysj_1(well_id,ny,scsj,scts,yy,ty,ycq,shbz,qw,hw,ycs,ycy,ycy1)
values(tmpwell_id,v_ny,0,0,yy,ty,0,'0',0,0,0,0,0);
end if;
END LOOP;
close cur_cqj_well;
commit;
end;