传入年月yearmonth,型号actypeChar,和数字num
得到rpt_bjch_midvalue 这张表的对应型号和传入年月的前num个月的UNPLANED_CH_NUM 的总和
自己写了个,完全错的,大家帮帮忙啊 rpt_bjch_midvalue CREATE OR REPLACE procedure GET_UNPLANED_CH_NUM(
@yearmonth varchar2,
@actypeChar varchar2,
@num int)
as 
begin
declare   @s   int
set @s = 'select a.UNPLANED_CH_NUM from rpt_bjch_midvalue a where 
(a.YEARMONTH   between   to_char(add_months(to_date(''+@yearmonth+'','yyyy-mm'),'+@num+'),'yyyy-mm') and ''+@yearmonth+'') and a.ACTYPE = ''+@actypeChar+''
return sum(@s)commit;
end;
/

解决方案 »

  1.   

    --tryCREATE or replace procedure GET_UNPLANED_CH_NUM
    (v_yearmonth in varchar2,  v_actypeChar in varchar2, 
     v_num in number, v_CH_NUM out number)
    as
     begin
       Select sum(UNPLANED_CH_NUM) into @CH_NUM from rpt_bjch_midvalue 
         Where to_char(YEARMONTH,'yyyy-mm') between v_yearmonth and 
         to_char(add_months(to_date(v_yearmonth,'yyyy-mm'),v_num),'yyyy-mm')
         and ACTYPE=v_actypeChar ;
     end GET_UNPLANED_CH_NUM;
      

  2.   

    CREATE   OR   REPLACE   procedure   GET_UNPLANED_CH_NUM( 
     @yearmonth in varchar2,
     @actypeChar in varchar2,
     @num in int,
     @s out int)
    as
    begin
      select sum(a.UNPLANED_CH_NUM) into @s from rpt_bjch_midvalue a 
         where a.YEARMONTH-to_date(a.YEARMONTH,'yyyymm')<=@num and 
               a.ACTYPE=@actypeChar;
    end;
    /
    兄弟啊,实在看不清你写的存储过程,隐隐约约不确定的写了下.
    期待楼下的高见!
      

  3.   

    --try CREATE   or   replace   procedure   GET_UNPLANED_CH_NUM 
    (v_yearmonth   in   varchar2,     v_actypeChar   in   varchar2,   
      v_num   in   number,   v_CH_NUM   out   number) 
    as 
      begin 
          Select   sum(UNPLANED_CH_NUM)   into v_CH_NUM from   rpt_bjch_midvalue   
              Where   to_char(YEARMONTH,'yyyy-mm')   between   v_yearmonth   and   
              to_char(add_months(to_date(v_yearmonth,'yyyy-mm'),v_num),'yyyy-mm') 
              and   ACTYPE=v_actypeChar   ; 
      end   GET_UNPLANED_CH_NUM;
      

  4.   

    to WangZWang:
    调试发现:to_char(YEARMONTH,'yyyy-mm'),YEARMONTH必须为DATE型的,如果是CHAR型的,就会报错误ORA-01722:无效数字
      

  5.   

    对的,这个地方不需要to_char的
    直接YEARMONTH 就可以了
    另外调试成功的是这样子的,between两个条件也反的
    CREATE   or   replace   procedure   GET_UNPLANED_CH_NUM 
    (v_yearmonth   in   varchar2,     v_actypeChar   in   varchar2,   
      v_num   in   number,   v_CH_NUM   out   number) 
    as 
      begin 
          Select   sum(UNPLANED_CH_NUM)   into v_CH_NUM from   rpt_bjch_midvalue   
              Where   YEARMONTH   between   to_char(add_months(to_date(v_yearmonth,'yyyy-mm'),v_num),'yyyy-mm') 
       and   v_yearmonth
                        and   ACTYPE=v_actypeChar   ; 
      end   GET_UNPLANED_CH_NUM;