在数据库里用过程和函数验证字段

1、整篇package

声明 

create or replace package pkg_verify_filedtl_info is

  

  procedure p_main(i_trans_id number);

  

  procedure p_processValidate(i_detail_id number);

  

  function p_validatePolicyNo(i_detail_id number) return varchar2;

  

  function p_validateNext(i_detail_id number) return varchar2;

  

  function p_validateInsuredDateBuild(i_detail_id number) return varchar2;

  

  function p_validateCiEffExpDate(i_detail_id number) return varchar2;


end pkg_verify_filedtl_info;

实现 

create or replace package body pkg_verify_filedtl_info is


  procedure p_main(i_trans_id number) is

    l_count number;

  begin

    --to verify wheather summary info is ok

    select count(1)

    into   l_count

    from   t_ci_upload_log t 

    where  t.trans_id = i_trans_id

           -- err_code = 1 means summer info verfiy sucess

           and t.err_code = 1;

    

    if(l_count>1) then

      for v_trans_detail in(

        select d.detail_id

        from   t_ci_upload_log t,

               t_ci_upload_file_detail d

        where  t.trans_id = i_trans_id

               and t.err_code = 1

               and t.detail_id = d.detail_id

      )loop

        p_processValidate(v_trans_detail.detail_id);

      end loop;

    end if;

  end;

  

  procedure p_processValidate(i_detail_id number) is

      l_result varchar2(100);

  begin

      l_result := p_validatePolicyNo(i_detail_id);

      

      if(l_result = 'ok') then

        l_result := p_validateNext(i_detail_id);

      end if;

      

      if(l_result = 'ok') then

        l_result := p_validateInsuredDateBuild(i_detail_id);

      end if;

      

      if(l_result = 'ok') then

        l_result :=p_validateCiEffExpDate(i_detail_id);

      end if;

      if(l_result != 'ok') then

        update t_ci_upload_log d

        set    d.err_code = l_result

        where  d.detail_id = i_detail_id;

        

        update t_ci_upload_file_detail d

        set    d.process_status = 2

        where  d.detail_id = i_detail_id;

      end if;

  end;

  

  function p_validatePolicyNo(i_detail_id number) return varchar2 

  as

    l_count number;

    l_result varchar2(100);

  begin

    select count(1)

    into   l_count

    from   t_ci_upload_file_detail d,

           t_policy_general g 

    where  d.detail_id = i_detail_id

           and d.policy_no = g.policy_no

           and g.contract_status_code=2;

    

    if(l_count=0) then

      --100:Policy No. not  exsits

      l_result := '100';

    else 

      l_result := 'ok';

    end if;

    

    return l_result;

  end;

  

  function p_validateNext(i_detail_id number) return varchar2 

  as

    l_count number;

    l_result varchar2(100);

  begin

    select count(1)

    into   l_count

    from   t_ci_upload_file_detail d

    where  d.detail_id = i_detail_id

           and d.insured_cpf is null;

    

    if(l_count>0) then

      --105  means   insured  cpf is null

      l_result := '105';

    else 

      l_result := 'ok';

    end if;

    

    return l_result;

  end;


    function p_validateInsuredDateBuild(i_detail_id number) return varchar2 

  as

    l_count number;

    l_result varchar2(100);

  begin

    select count(1)

    into   l_count

    from   t_ci_upload_file_detail d

    where  d.detail_id = i_detail_id

    and (TO_DATE(TO_CHAR(sysdate, 'dd/MM/yyyy'), 'dd/MM/yyyy')-TO_DATE(TO_CHAR(d.insured_date_build,'dd/MM/yyyy'), 'dd/MM/yyyy'))/365 <70;


    

    if(l_count>0) then

    --101  means   insured is  less than 70 years

      l_result := '101';

    else 

      l_result := 'ok';

    end if;

    

    return l_result;

  end;

  ---validate Ci EffDate and expdate

     function p_validateCiEffExpDate(i_detail_id number) return varchar2 

  as

    l_movementType number;

    l_Idays number;

    l_Edays number;

    l_retroactiveDays number;

    l_CalculationByProRate number;

    l_result varchar2(100);

  begin

    select t.movement_type

    into   l_movementType

    from   t_ci_upload_file_detail t

    where  t.detail_id=i_detail_id;

    

    select to_date(t.competence,'mmyyyy')-d.inclusion_date as days

    into   l_Idays

    from   t_ci_upload_file_detail d,

           t_ci_upload_file_summary t

    where  d.detail_id = i_detail_id

          

           and t.trans_id=d.trans_id;

    select to_date(t.competence,'mmyyyy')-d.Exclusion_Date as days

    into   l_Edays

    from   t_ci_upload_file_detail d,

           t_ci_upload_file_summary t

    where  d.detail_id = i_detail_id

          

           and t.trans_id=d.trans_id;      

    select TO_NUMBER(t.retroactive_day) 

    into   l_retroactiveDays

    from   t_cts_mp_contract t,

           t_ci_upload_file_detail d,

           t_mp_contract m

    where  t.mp_contract_id=m.mp_contract_id

           

           and d.policy_no=m.mp_contract_code

           and d.detail_id=i_detail_id;

           

    select t.calculate_by_prorate

    into   l_CalculationByProRate

    from   t_cts_mp_contract t,

           t_ci_upload_file_detail d,

           t_mp_contract m

    where  t.mp_contract_id=m.mp_contract_id

          

           and d.policy_no=m.mp_contract_code

           and d.detail_id=i_detail_id;

   

    if(l_movementType=1) then

    if(l_Idays-l_retroactiveDays>0) then

    --103  means   certificate inclusion effective date  is wrong generated

           l_result := '103';

    else 

           l_result := 'ok';

          if(l_CalculationByProRate=1) then

             update t_ci_upload_file_detail t 

             set    t.eff_date=t.inclusion_date

             where  t.detail_id=i_detail_id;

          else 

             update t_ci_upload_file_detail t 

             set    t.eff_date=trunc(t.inclusion_date,'mm')

             where  t.detail_id=i_detail_id;

          end if;

    end if;

    end if;

      if(l_movementType=2) then

    if(l_Edays-l_retroactiveDays>0) then

    --104  means   certificate excusion EXPIRY date  is wrong generated

           l_result := '104';

    else 

           l_result := 'ok';

          if(l_CalculationByProRate=1) then

             update t_ci_upload_file_detail t 

             set    t.Exp_Date=t.Exclusion_Date

             where  t.detail_id=i_detail_id;

          else 

             update t_ci_upload_file_detail t 

             set    t.Exp_Date=to_date(to_char(last_day(t.exclusion_date),'ddmmyyyy'),'ddmmyyyy')

             where  t.detail_id=i_detail_id;

          end if;

    end if;

    end if;

    if(l_movementType=3) then

   

          if(l_CalculationByProRate=1) then

             update t_ci_upload_file_detail t 

             set    t.eff_date= (select sysdate from dual)

             where  t.detail_id=i_detail_id;

          else 

             update t_ci_upload_file_detail t 

             set    t.eff_date=(select trunc(sysdate,'mm')  from dual)

             where  t.detail_id=i_detail_id;

          end if;

    end if;

   

    return l_result;

  end;

end pkg_verify_filedtl_info;

在Java文件中调用    调用存储过程 或者没有返回值的function :

public void processAllFile(Long transId) throws Exception {


DBean db = new DBean();


Connection con = null;


CallableStatement cs = null;


try {


db.connect();


con = db.getConnection();


cs = con


.prepareCall("{Call pkg_verify_filedtl_info.p_main(?)}");


cs.setLong(1, transId);

cs.execute();


} catch (Exception e) {


throw e;


} finally {


DBUtils.clear(null, cs, db);


}


};

调用 pkg 里面有返回值的function 

 

 String policyId = null;

 DBean db = new DBean();

   CallableStatement cs = null;

   try {

     db.connect();

     Connection con = db.getConnection();

     String expression = "{ ? = call pkg_verify_filedtl_info.f_getCertNoByCNPJ(?,?) }";

     cs = con.prepareCall(expression);

     cs.registerOutParameter(1, java.sql.Types.LONGVARCHAR);

     cs.setString(2, mpNo);

     cs.setString(3, insuredCpf);

     cs.execute();

     policyId = cs.getString(1);

   } catch (Exception ex) {

     throw ExceptionFactory.parse(ex);

   } finally {

   cs.close();

   db.close();

   }


转载于:https://my.oschina.net/ruibo/blog/199260

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值