Oracle_FUNCTION ——getceflag

本文介绍了一个复杂的PL/SQL函数getceflag的设计与实现过程。该函数通过比较输入的年份和周期与数据库中记录的数据来返回一个标志值,用于指示当前输入的年周期是否已经存在或者早于/晚于已有的记录。此函数涉及到多表连接和条件判断,并使用左连接进行数据匹配。

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

CREATE OR REPLACE FUNCTION getceflag
(
       P_PK_PSNDOC IN CHAR,
       P_YEAR IN CHAR,
       P_PERIOD IN CHAR,
       P_PK_ORG IN CHAR
)
RETURN NUMBER IS
       P_YEARPERIOD CHAR(6) := P_YEAR || P_PERIOD;
       C_YEARPERIOD CHAR(6);
       result NUMBER(31,0);
BEGIN
       result := -1;
       
       /*
       select (case when nvl(cyearperiod,'N/A') = 'N/A' then -1 
              when P_YEARPERIOD = cyearperiod then 0
              when P_YEARPERIOD > cyearperiod then 1
              when P_YEARPERIOD < cyearperiod then -1
              else -1 end) into result*/
       select cyearperiod into C_YEARPERIOD
         from (select pk_wa_data from wa_data_temp where rownum=1) tempdata 
    left join (select da.cyearperiod,rownum rowno from (select wdtemp.cyearperiod
                 from wa_data_temp wdtemp 
                where wdtemp.pk_psndoc = (select pk_psndoc from bd_psndoc where code = P_PK_PSNDOC and nvl(dr,0)=0 and rownum = 1)
                  and wdtemp.Pk_Org = (select pk_org from org_orgs where code = P_PK_ORG and nvl(dr,0)=0 and rownum = 1)
                  and wdtemp.cyear = P_YEAR
                  and wdtemp.cperiod < P_PERIOD
                  and (wdtemp.f_310 - wdtemp.f_308) > 0 --  累计奖金 - 4倍投保金额
                  and wdtemp.checkflag = 'Y'
                  and nvl(wdtemp.dr, 0) = 0
             order by wdtemp.cyearperiod asc) da) temp on 1=1 where nvl(temp.rowno,1) = 1;




       if(nvl(C_YEARPERIOD,'N/A') = C_YEARPERIOD) then
             if(P_YEARPERIOD = C_YEARPERIOD) then
                    result := 0;
             elsif(P_YEARPERIOD > C_YEARPERIOD) then
                     result := 1;
             elsif(P_YEARPERIOD < C_YEARPERIOD) then
                     result := -1;
             end if;
       else
             result := -1;
       end if;


       RETURN result;
END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值