Oracle_FUNCTION ——gettwsum

本文介绍了一个PLSQL函数gettwsum的具体实现,该函数通过传入年份、期间、类型等参数来计算指定条件下的数值总和。示例中展示了如何根据不同的数据类型和参数动态构造查询条件,并对特定字段进行求和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值