oracel 存储过程

今天存储过程运行,遇到个情况,就是在测试机上运行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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值