⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pkg_val_kpd.pck

📁 数据迁移使用的ETL程序包
💻 PCK
📖 第 1 页 / 共 5 页
字号:
create or replace package PKG_VAL_KPD is

  -- Author  : Wan, Li
  -- Created : 6/27/2006 12:56:03 PM
  -- Purpose : Validation src_prod_kenan, src_discount_kenan for kenan trnasformation

  -- Public type declarations
  -- type <TypeName> is <Datatype>;

  type REFCURSOR is ref cursor;
  type CLMTABLE IS table of varchar2(100) index by varchar2(1000);
  type SSSTABLE IS table of varchar2(100) index by varchar2(1000);
  type CSETABLE1 is table of vld_kpd_detail.row_id%type index by pls_integer;
  type CSETABLE2 is table of vld_kpd_detail.src_id%type index by pls_integer;
  type CSETABLE3 is table of vld_kpd_detail.primary_id%type index by pls_integer;
  type CSETABLE4 is table of vld_kpd_detail.error_code%type index by pls_integer;
  type CSETABLE5 is table of vld_kpd_detail.error_msg%type index by pls_integer;

  -- Public constant declarations
  -- <ConstantName> constant <Datatype> := <Value>;
  C_BACK_DATE   constant date := pkg_val_cbs.G_BACK_DATE;
  C_CUTOFF_DATE constant date := pkg_val_cbs.G_CUTOFF_DATE;

  C_ErrMsg_PR01 constant varchar2(1000) := 'PR01: can not find parent SI
                                                   找不到SI';
  C_ErrMsg_PR02 constant varchar2(1000) := 'PR02: if kenan_product_id <> 81803, product rc_rate must be not null';
  C_ErrMsg_PR03 constant varchar2(1000) := 'PR03: if SI equip_type is in cfg_ken_uu, units and units_type must be mapped
                                                   如果该设备是按批价进行计费的,那么units和units_type必须在配置表中找的到';
  C_ErrMsg_PR04 constant varchar2(1000) := 'PR04: 同一用户下不可以有相互冲突的程控业务';
  C_ErrMsg_PR05 constant varchar2(1000) := 'PR05: SI cannot have suspended RC, if it is active
                                                   如果SI是在用的,那么下面不能挂停机保号月租,
                                                   只有括号内的这几种设备才可以挂停机保号月租( 1001 ,  1002 ,  1004 ,  1012 ,  1018 ,  4002 ,  4003 ,  4004 ,  6003 ,  6004 )';
  C_ErrMsg_PR06 constant varchar2(1000) := 'PR06: SI must have RC(132/40004/40005) if SI is suspended
                                                   如果SI停机,那么必须挂停机保号的月租';
  C_ErrMsg_PR07 constant varchar2(1000) := 'PR07: product start_dt cannot be null
                                                   产品的开始时间不能为空';
  C_ErrMsg_PR08 constant varchar2(1000) := 'PR08: START_DT cannot be earlier than start_dt of its parent SI
                                                   产品的开始时间不能早于资产的开始时间';
  C_ErrMsg_PR09 constant varchar2(1000) := 'PR09: START_DT (123/40004/40005) must be equal with CR_SUS_DT, if its parent SI is suspended
                                                   如果SI资产已经主动停机,那么停机保号产品的开始时间必须等于资产停机的时间';
  C_ErrMsg_PR10 constant varchar2(1000) := 'PR10: END_DT cannot be earlier than START_DT
                                                   产品的结束时间不能早于产品开始时间';
  C_ErrMsg_PR11 constant varchar2(1000) := 'PR11: END_DT cannot be null and must be earlier than end_dt of SI or be equal with its START_DT, if its parent SI is disconected
                                                   如果SI资产已经拆机,那么产品的结束时间不能为空并且必须早于资产的结束时间或者产品开始时间=产品结束时间';
  C_ErrMsg_PR12 constant varchar2(1000) := 'PR12: BILLED_THRU_DATE cannot be earlier than START_DT
                                                   上一次出帐的日期不能早于产品的开始时间';
  C_ErrMsg_PR13 constant varchar2(1000) := 'PR13: BILLED_THRU_DATE cannot be later than END_DT
                                                   上一次出帐日期不能晚于产品的结束时间,也就是说产品都已经结束就不能再出帐了';
  C_ErrMsg_PR14 constant varchar2(1000) := 'PR14: BILLED_THTU_DATE cannot be null or > CR_SUS_DT if START_DT <= LEAST(G_CUTOFF_DATE, CR_SUS_DT), when BILL_WHILE_SUSPEND = 0: 
                                                  当停机期间不收钱: 如果产品开始小与(割接日期和停机时间)中较小的一个,那么上一次出帐日期不能为空并且不能晚于停机时间';
  C_ErrMsg_PR15 constant varchar2(1000) := 'PR15: BILLED_THRU_DATE must be null if its START_DT > LEAST(G_CUTOFF_DATE, CR_SUS_DT), when BILL_WHILE_SUSPEND = 0
                                                  当停机不收钱:如果产品开始大于(割接时间,停机时间)较小的一个,那么上一次出帐日期必须为空';
  C_ErrMsg_PR16 constant varchar2(1000) := 'PR16: BILLED_THTU_DATE cannot be null if START_DT < G_CUTOFF_DATE, when BILL_WHILE_SUSPEND = 0 and SI is not suspended
                                                   当停机期间不收钱并且资产是在用的:如果产品的开始时间早于割接日期,那么上一次出帐的日期不能为空';
  C_ErrMsg_PR17 constant varchar2(1000) := 'PR17: BILLED_THRU_DATE must be null if its START_DT >= G_CUTOFF_DATE, when BILL_WHILE_SUSPEND = 0 and SI is not suspended
                                                   当停机期间不收钱并且资产是在用的:如果产品的开始时间晚于割接日期,那么上一次出帐日期必须为空';
  C_ErrMsg_PR18 constant varchar2(1000) := 'PR18: BILLED_THTU_DATE cannot be null if START_DT < G_CUTOFF_DATE, when BILL_WHILE_SUSPEND = 1
                                                   当停机期间要收钱:如果产品的开始时间小于割接日期,那么上一次出帐日期不能为空';
  C_ErrMsg_PR19 constant varchar2(1000) := 'PR19: BILLED_THRU_DATE must be null if its START_DT >= G_CUTOFF_DATE, when BILL_WHILE_SUSPEND = 1
                                                   当停机期间要收钱:果产品的开始时间大于割接日期,那么上一次出帐日期必须为空';
  C_ErrMsg_PR20 constant varchar2(1000) := 'PR20: START_DT must be equal with its parnt SI START_DT, if it is a suspend rc
                                                   如果SI停机,那么产品的开始时间必须等于SI停机时间';
  C_ErrMsg_PR21 constant varchar2(1000) := 'PR21: monthly fee for 800 must pertain to 800 device
                                                   800月租必须挂在800设备';
  C_ErrMsg_PR22 constant varchar2(1000) := 'PR22: montyly fee for 11800 must pertain to 11800 device
                                                   11800设备必须挂11800月租';
  C_ErrMsg_PR23 constant varchar2(1000) := 'PR23: COMPONENT_ID must be defined in CFG_KEN_CAT';
  C_ErrMsg_PR24 constant varchar2(1000) := 'PR24: 这种设备必须要有guding RC';
  C_ErrMsg_PR25 constant varchar2(1000) := 'PR25: 这种设备超过1个guding RC';
  C_ErrMsg_PR26 constant varchar2(1000) := 'PR26: 有2个或2个以上的guding RC,时间不能overlap';
  C_ErrMsg_PR27 constant varchar2(1000) := 'PR27: 如果产品的is_overriden=0,其资费不能为空';
  C_ErrMsg_PR28 constant varchar2(1000) := 'PR28: 该产品不应该挂在该设备下';
  C_ErrMsg_PR29 constant varchar2(1000) := 'PR29: 产品的component_id不能为空';
  C_ErrMsg_PR30 constant varchar2(1000) := 'PR30: 宽带类产品的如果停机,那么必须要有停机保号费(40004或40005)';
  C_ErrMsg_PR31 constant varchar2(1000) := 'PR31: 9种子产品的和设备类型互斥';
  C_ErrMsg_PR32 constant varchar2(1000) := 'PR32: 宽带Dummy产品的不允许做覆盖';
  C_ErrMsg_PR33 constant varchar2(1000) := 'PR33: 停机保号费产品的不允许做覆盖';
  C_ErrMsg_PR34 constant varchar2(1000) := 'PR34: 宽带设备只能挂宽带类的停机保号产品';
  C_ErrMsg_PR35 constant varchar2(1000) := 'PR35: 固化设备只能挂固化类的停机保号产品';
  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  C_ErrMsg_DC01 constant varchar2(1000) := 'DC01: DISCOUNT_TYPE must be in (2,3,4,5) except for corridor
                                                 除了corridor以外的所有优惠类型必须是定义在(2,3,4,5)中';
  C_ErrMsg_DC02 constant varchar2(1000) := 'DC02: SERV_ID must exist in SRC_SERV if DISCOUNT_TYPE = 3
                                                  如果是SI级别的优惠类型,那么serv_id必须存在src_serv表中';
  C_ErrMsg_DC03 constant varchar2(1000) := 'DC03: ACCT_NBR_97 must exist in SRC_ACCT if its DISCOUNT_TYPE in (2,4,5)
                                                  如果是BA级别的优惠类型,那么acct_nbr_97必须存在src_acct表中';
  C_ErrMsg_DC04 constant varchar2(1000) := 'DC04: GROUP_NO cannot be null when DISCOUNT_TYPE in (4, 5)';
  C_ErrMsg_DC05 constant varchar2(1000) := 'DC05: DISCT_METHOD must be in (1,2,3,4,5,6)
                                                  优惠的方法必须定义于(1,2,3,4,5,6)中';
  C_ErrMsg_DC06 constant varchar2(1000) := 'DC06: X/Y/Z/W/V/X6/X7 cannot be null according to its DISCT_METHOD';
  C_ErrMsg_DC07 constant varchar2(1000) := 'DC07: PAY X GET Y discount for one SI/BA cannot be more than 1 in same duration';
  C_ErrMsg_DC08 constant varchar2(1000) := 'DC08: START_DT cannot be null
                                                  优惠的开始时间不能为空';
  C_ErrMsg_DC09 constant varchar2(1000) := 'DC09: START_DT must be trunced without time info';
  C_ErrMsg_DC10 constant varchar2(1000) := 'DC10: START_DT cannot be earlier than START_DT of SI if its DISCOUNT_TYPE = 3
                                                  如果是SI级别的优惠,那么优惠的开始时间不能早于SI资产的时间';
  C_ErrMsg_DC11 constant varchar2(1000) := 'DC11: START_DT cannot be earlier than ACCT_CREATED_DATE of BA if its DISCOUNT_TYPE = 2,4,5
                                                 如果是BA级别的优惠,那么优惠的开始时间不能早于BA的创建日期';
  C_ErrMsg_DC12 constant varchar2(1000) := 'DC12: END_DT cannot be earlier than START_DT
                                                 优惠的结束时间不能早于优惠开始时间';
  C_ErrMsg_DC13 constant varchar2(1000) := 'DC13: END_DT cannot be null and must be earlier than end_dt of SI or  be equal with its START_DT, when DISCOUNT_TYPE is 3 and its parent SI is disconected
                                                  如果是SI级别的优惠并且SI资产已经拆机,那么优惠的结束时间不能为空并且必须早于SI资产的结束时间,或者优惠的开始时间=优惠结束时间';
  C_ErrMsg_DC14 constant varchar2(1000) := 'DC14: COMPONENT_ID must be defined in CFG_KEN_CAT';
  C_ErrMsg_DC15 constant varchar2(1000) := 'DC15: all paying_sbu_account in src_discount must also exist in src_acct';
  C_ErrMsg_DC16 constant varchar2(1000) := 'DC16: 一个用户下面只能挂一个corridor';
  C_ErrMsg_DC17 constant varchar2(1000) := 'DC17: 打折百分比不能大于100';
  C_ErrMsg_DC31 constant varchar2(1000) := 'DC31: 同一个SI用户下的亲情网优惠不能有冲突';
  C_ErrMsg_DC32 constant varchar2(1000) := 'DC32: SI欠费双停必须要求欠停包';
  C_ErrMsg_DC33 constant varchar2(1000) := 'DC33: SI欠费单停不能有欠停包';
  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  C_ErrMsg_GDC01 constant varchar2(1000) := 'GDC01: record in src_discount_kenan, not in src_contract_assignment_hq';
  C_ErrMsg_GDC02 constant varchar2(1000) := 'GDC02: record in src_contract_assignment_hq, not in src_discount_kenan';
  C_ErrMsg_GDC03 constant varchar2(1000) := 'GDC03: record in src_cah_ext_data, not in src_contract_assignment_hq';
  C_ErrMsg_GDC04 constant varchar2(1000) := 'GDC04: record in src_contract_assignment_hq, not in src_cah_ext_data';
  C_ErrMsg_GDC05 constant varchar2(1000) := 'GDC05: 一个群组号不能有重复的优惠类型';
  C_ErrMsg_GDC06 constant varchar2(1000) := 'GDC06: (src_cah_ext_data.service_start_dt >= src_contract_assignment_hq.start_dt, src_cah_ext_data.service_end_dt <= src_contract_assignment_hq.end_dt) must be true';
  C_ErrMsg_GDC07 constant varchar2(1000) := 'GDC07: (src_contract_assignment_hq.start_dt >= src_discount_kenan.start_dt, src_contract_assignment_hq.end_dt <= src_discount_kenan.end_dt) must be true';
  C_ErrMsg_GDC08 constant varchar2(1000) := 'GDC08: (src_contract_assignment_hq.start_dt >= src_acct.acct_created_dt) must be true';
  C_ErrMSg_GDC09 constant varchar2(1000) := 'GDC09: (src_cah_ext_data.service_start_dt >= src_serv.start_dt, src_cah_ext_data.service_end_dt <= src_serv.end_dt) must be true';
  C_ErrMSg_GDC10 constant varchar2(1000) := 'GDC10: (src_cah_ext_data.acct_nbr_97 <> src_serv.acct_nbr_97) 群组优惠对应的BA与三户对应的BA不一致';
  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------           
  C_ErrMsg_NRC01 constant varchar2(1000) := 'NRC01: 找不到SI服务实例';
  C_ErrMsg_NRC02 constant varchar2(1000) := 'NRC02: NRC不是当月的';
  C_ErrMsg_NRC03 constant varchar2(1000) := 'NRC03: 账目类型不匹配';
  C_ErrMsg_NRC04 constant varchar2(1000) := 'NRC04: NRC 的钱不能为负';
  C_ErrMsg_NRC05 constant varchar2(1000) := 'NRC05: NRC的生效时间必须落在SI之间';
  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                                                                                                                                                                                                                                             
  -- Public variable declarations
  t_KCLM CLMTABLE;
  t_CKC  CLMTABLE;
  t_CAB  CLMTABLE;
  t_CU   CLMTABLE;
  t_CUT  CLMTABLE;
  -- Public function and procedure declarations
  -- function <FunctionName>(<Parameter> <Datatype>) return <Datatype>;
  procedure prc_preval_pr(p_Seq number, p_Mode number);
  procedure prc_val_pr(p_Seq         number,
                       p_Mode        number,
                       p_TotalStream number,
                       p_StreamNo    number);
  procedure prc_posval_pr(p_Seq number, p_Mode number);
  procedure prc_preval_dc(p_Seq number, p_Mode number);
  procedure prc_val_dc(p_Seq         number,
                       p_Mode        number,
                       p_TotalStream number,
                       p_StreamNo    number);
  procedure prc_posval_dc(p_Seq number, p_Mode number);
  procedure prc_val_grp_dc(p_Seq number, p_Mode number);

  procedure prc_preval_nrc(p_Seq number, p_Mode number);
  procedure prc_val_nrc(p_Seq         number,
                        p_Mode        number,
                        p_TotalStream number,
                        p_StreamNo    number);
  procedure prc_posval_nrc(p_Seq number, p_Mode number);

end PKG_VAL_KPD;
/
create or replace package body PKG_VAL_KPD is

  -- Private type declarations
  -- type <TypeName> is <Datatype>;

  -- Private constant declarations
  -- <ConstantName> constant <Datatype> := <Value>;

  -- Private variable declarations
  -- <VariableName> <Datatype>;

  -- Function and procedure implementations

  /***************************************************************************/
  procedure prc_preval_pr(p_Seq number, p_Mode number) is
    /***************************************************************************/
    -- Author  : Wan, Li
    -- Created : 6/27/2006 12:56:03 PM
    -- Purpose : update row_id for src_prod
    /***************************************************************************/
    l_ProName   varchar2(20) := 'PRC_PREVAL_PR';
    l_ErrMsg    varchar2(100);
    l_NullRowID number(10);
    l_MaxRowID  number(10);
  begin
    select count(1)
      into l_NullRowID
      from src_prod_kenan
     where row_id is null;
    if l_NullRowID > 0 then
      insert into vld_log
      values
        (l_ProName, p_Seq, p_Mode, sysdate, null, null, null, null, null);
      commit;
      /*end initialize check_log*/
      select nvl(max(row_id), 0) into l_MaxRowID from src_prod_kenan;
      update src_prod_kenan
         set row_id = l_MaxRowID + rownum, is_processed = 'E'
       where row_id is null;
      update vld_log
         set end_time = sysdate, exec_msg = 'Completed'
       where procedure_name = l_ProName
         and batch_seq = p_Seq
         and vld_mode = p_Mode;
    
      commit;
    end if;
  exception
    when others then
      rollback;
      update vld_log
         set exec_msg = l_ErrMsg
       where procedure_name = l_ProName
         and batch_seq = p_Seq
         and vld_mode = p_Mode;
      commit;
  end prc_preval_pr;

  procedure prc_val_pr(p_Seq         number,
                       p_Mode        number,
                       p_TotalStream number,
                       p_StreamNo    number) is
    /***************************************************************************/
    -- Author  : Wan, Li
    -- Created : 6/27/2006 12:56:03 PM
    -- Purpose : Validation for src_prod_kenan
    /***************************************************************************/
    type LOOPREC is record(
      serv_id            src_prod_kenan.serv_id%type,
      src_id             src_prod_kenan.src_id%type,
      kenan_product_id   src_prod_kenan.kenan_product_id%type,
      prod_start_dt      src_prod_kenan.start_dt%type,
      prod_end_dt        src_prod_kenan.end_dt%type,
      billed_thru_dt     src_prod_kenan.billed_thru_date%type,
      units              src_prod_kenan.units%type,
      units_type         src_prod_kenan.units_type%type,
      rc_rate            src_prod_kenan.rc_rate%type,
      row_id             src_prod_kenan.row_id%type,
      si_src_id          src_serv.src_id%type,
      si_serv_id         src_serv.serv_id%type,
      status             src_serv.status%type,
      serv_area          src_serv.serv_area%type,
      si_start_dt        src_serv.start_dt%type,
      si_end_dt          src_serv.end_dt%type,
      equip_type         src_serv.equip_type%type,
      suspend_initiative src_serv.suspend_initiative%type,
      cr_sus_dt          src_serv.cr_sus_dt%type,
      is_processed       src_serv.is_processed%type,
      is_overriden       src_prod_kenan.is_overriden%type);
  
    c_Pr         REFCURSOR;
    rec_Pr       LOOPREC;
    t_SI         SSSTABLE;
    t_CSE1       CSETABLE1;
    t_CSE2       CSETABLE2;
    t_CSE3       CSETABLE3;
    t_CSE4       CSETABLE4;
    t_CSE5       CSETABLE5;
    l_TblName    varchar2(20) := 'SRC_PROD_KENAN';
    l_ProName    varchar2(20) := 'PRC_VAL_PR_' || to_char(p_TotalStream) || '_' ||
                                 to_char(p_StreamNo);
    l_StartRec   number(10);
    l_EndRec     number(10);
    l_ErrMsg     varchar2(100);
    l_TotalNum   number(10) := 0;
    l_SuccessNum number(10) := 0;
    l_ErrorNum   number(10) := 0;
    l_SubQuery   varchar2(2000);
    l_Query      varchar2(3000);
    l_Count      number(10) := 1;
    l_Count1     number(10) := 0;
    l_CountEmf   number(10) := 0;
    l_CountEmf0  number(10) := 0;
    l_CountEmf1  number(10) := 0;
    l_CountEmf2  number(10) := 0;
    l_StartDt    date;
    --l_flag           number(10) := 0;
  
  begin
    /*************************************************************************/
    /*initialize check_log*/
    select max(row_id) into l_EndRec from src_prod_kenan;
    l_StartRec := floor(l_EndRec * (p_StreamNo - 1) / p_TotalStream);
    l_EndRec   := floor(l_EndRec * p_StreamNo / p_TotalStream);
  
    select count(1)
      into l_TotalNum
      from src_prod_kenan
     where row_id > l_StartRec
       and row_id <= l_EndRec;
  
    insert into vld_log
    values
      (l_ProName,
       p_Seq,
       p_Mode,
       sysdate,
       null,
       l_TotalNum,
       null,
       null,
       null);
    commit;
  
    t_SI.delete;
    t_CSE1.delete;
    t_CSE2.delete;
    t_CSE3.delete;
    t_CSE4.delete;
    t_CSE5.delete;
  
    /*end initialize check_log*/
    l_SubQuery := 'select sp.serv_id, sp.src_id, sp.kenan_product_id, sp.start_dt, sp.end_dt, sp.billed_thru_date,' ||
                  'sp.units, sp.units_type, sp.rc_rate, sp.row_id, ss.src_id, ss.serv_id,' ||
                  'ss.status, ss.serv_area, ss.start_dt, ss.end_dt, ss.equip_type, ss.suspend_initiative, ss.cr_sus_dt, ss.is_processed , sp.is_overriden ';
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -