Oracle_FUNCTION ——gettwsum

CREATE OR REPLACE FUNCTION gettwsum
(
       P_YEAR IN CHAR,
       P_PERIOD IN CHAR,
       P_TYPE IN NUMBER,
       P_PK_ORG IN CHAR,
       P_DEF IN CHAR
)
RETURN NUMBER IS
       P_YEARPERIOD CHAR(6);
       result NUMBER(31,8);
BEGIN
       result := 0.00;
       -- 根据数据类型,计算上一期间年月
       P_YEARPERIOD := case when P_TYPE = 2 then P_YEAR || P_PERIOD
                            when P_TYPE = 1 and P_PERIOD = '01' then (to_number(P_YEAR)-1) || '12'
                            else P_YEAR || (case when to_number(P_PERIOD - 1) < 10 then '0' else '' end) || to_number(P_PERIOD - 1)
                            end;


       -- 下面  '自定义参数值1', wdtemp.f_1 ... 等根据需要自行定义其用处,目的是根据传入不同参数汇总不同字段,
       -- 如汇总逻辑有区别,也可根据此参数作判断分别处理,请自行扩展
       select sum(
              decode(P_DEF,
                     '自定义参数值1', wdtemp.f_216+wdtemp.f_309,--应税薪资
                     '自定义参数值2', wdtemp.f_307,--健保投保金额
                     '自定义参数值3',(case when wdtemp.f_204>0 then 1 else 0 end)--拿奖金人数
              )) into result
         from wa_data_tempw1 wdtemp
        where wdtemp.workorg = (select pk_org from org_orgs where code = P_PK_ORG and nvl(dr,0)=0 and rownum = 1)
          and wdtemp.cyearperiod = P_YEARPERIOD
          --and wdtemp.checkflag = 'Y'
          and wdtemp.stopflag='N'
          and nvl(wdtemp.dr, 0) = 0;


       RETURN result;
END;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章