设为首页 收藏本站
查看: 568|回复: 0

[经验分享] oracle 存储过程实例-1

[复制链接]

尚未签到

发表于 2016-7-19 12:10:07 | 显示全部楼层 |阅读模式
create or replace
PROCEDURE misr016_RepaymentPlanSummary IS
/******************************************************************************
   NAME:       misr016_RepaymentPlanSummary
   PURPOSE:

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        2006-3-21   lulineng       1. Created this procedure.

   NOTES:
         only insert increment
         insert all tpa records
         then update the paid amount by caculating the CT transactions from PPR

******************************************************************************/

  TYPE TPA IS RECORD(
        ID       TMR016_REPAYMENTPLANSUMMARY.ID%TYPE,
        FREQ     TT05_TPA.CT05_INST_FREQ%TYPE,
        INST     TT05_TPA.CT05_NR_INST%TYPE,
        FIN      TT05_TPA.CR12_ACCOUNTS_NUMBER%TYPE,
        TAXYEAR  TT05_TPA.CT05_TAX_YEAR%TYPE,
        PRDFROM  TT05_TPA.CT05_PRD_FROM%TYPE,
        PRDTO    TT05_TPA.CT05_PRD_TO%TYPE
   );
  v_tpa          TPA;


TYPE vCurType  IS REF CURSOR;
  vSQL           VARCHAR2(1000);
  vPick          vCurType;

  v_Month         NUMBER(10,2);
  v_PaidAMT       NUMBER(19,2);

BEGIN

      --insert new tpa
      insert into tmr016_repaymentplansummary
        (id,
         cs05_office_id,
         cg02_tax_type,
         debt_amount,
         create_date,
         tpa_no)
        select mis_sequence.nextval,
               b.cs05_office_id,
               b.cg02_tax_type,
               a.ct05_tpa_amt,
               a.ct05_create_date,
               a.ct05_tpa_no
        from tt05_tpa a, tr12_accounts_tin b
        where a.cr12_accounts_number = b.cr12_accounts_number(+)
               and not exists (select 1
                 from tmr016_repaymentplansummary
                 where tpa_no = a.ct05_tpa_no)
               and a.cg03_tpa_status_cde = '12603';


      --reset paid amount to tpa down amount
      update tmr016_repaymentplansummary a
        set a.paid_amount = (select b.ct05_down_amt
                          from tt05_tpa b
                         where b.ct05_tpa_no = a.tpa_no);


      --calculate paid amount
      vSQL := 'select a.id,'
              ||' b.ct05_inst_freq,'
              ||' b.ct05_nr_inst,'
              ||' b.cr12_accounts_number,'
              ||' b.ct05_tax_year,'
              ||' b.ct05_prd_from,'
              ||' b.ct05_prd_to'
              ||' from tmr016_repaymentplansummary a, tt05_tpa b'
              ||' where a.tpa_no = b.ct05_tpa_no';
      open vPick for vSQL;
      loop
          FETCH vPick INTO v_tpa;
          EXIT WHEN vPick%NOTFOUND;


          --calculate months
          if v_tpa.FREQ = 1 then
             v_Month := v_tpa.INST * 0.25;
          elsif v_tpa.FREQ = 2 then
             v_Month := v_tpa.INST * 0.5;
          elsif v_tpa.FREQ = 4 then
             v_Month := v_tpa.INST * 3;
          else
             v_Month := v_tpa.INST;
          end if;

          --update month
          update tmr016_repaymentplansummary a set a.months = v_Month
            where a.id = v_tpa.ID;

          --get paid amount of this tpa
          select sum(a.ct01_amt) into v_PaidAMT
            from tt01_acct_transactions a
           where a.ct01_dt_ct_ind = 'CT'
             and a.ct01_trans_reversed <> 1
             and exists(select 1
                    from tt01_acct_transactions b
                   where b.cr12_fin=a.cr12_fin
                     and trunc(b.ct01_tax_year,'yyyy')=trunc(a.ct01_tax_year,'yyyy')
                     and b.ct01_prd_from=a.ct01_prd_from
                     and b.ct01_prd_to=a.ct01_prd_to
                     and b.cn07_liability_type_id=a.cn07_liability_type_id
                     --and b.ct01_pen_int_prd_start=a.ct01_pen_int_prd_start
                     --and b.ct01_pen_int_prd_end=a.ct01_pen_int_prd_end
                     --and b.ct01_pen_int_tax_year=a.ct01_pen_int_tax_year
                     and b.cr12_fin = v_tpa.FIN
                     and trunc(b.ct01_tax_year,'yyyy') = trunc(v_tpa.TAXYEAR,'yyyy')
                     and b.ct01_prd_from = v_tpa.PRDFROM
                     and b.ct01_prd_to = v_tpa.PRDTO
                     and b.ct01_dt_ct_ind = 'DT'
                     and b.ct01_trans_reversed <> 1);

          if v_PaidAMT is null then
             v_PaidAMT := 0;
          end if;

          --update paid amount
          update tmr016_repaymentplansummary a
          set a.paid_amount = a.paid_amount + v_PaidAMT
          where a.id = v_tpa.ID;

          commit;

     end loop;
      close vPick;


END misr016_RepaymentPlanSummary;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-246345-1-1.html 上篇帖子: oracle中update...select 下篇帖子: oracle 存储过程实例-2
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表