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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章