银行数仓项目实战(六)--基础层(完成存款的明细表---宽表)


FDM基础层:根据主题(需求),将源数据加工集成,形成业务明细表–宽表

熟悉业务

当我们的工作来到基础层,我们首先要做的是跟甲方沟通,要求甲方提供需求,同时我们应该熟悉数据字典,熟悉业务。

模型设计

模型设计(字段取数来源 字段加工规则 字段数据类型)

梳理映射关系

梳理映射关系:字段 源–目标的关系,字段的加工逻辑,表关联逻辑,过滤逻辑,伪代码。
我们做的项目是存款项目,需要梳理映射文档。以下是甲方提供的需求,我们需要从源数据中将对应的字段找出。
在这里插入图片描述
右边是甲方需要的字段,这些字段分布在两个表中,我们需要花时间找出他们来,最后找完的结果如下。
在这里插入图片描述
梳理完映射文档,我们需要建立明细表–宽表。

加工宽表

问甲方要建表语句

-- Create table
create table F_AGR_DEP_SAP_ACCT
(
  acct_no             VARCHAR2(10),
  curr_cd             VARCHAR2(20),
  curr_iden           VARCHAR2(1),
  acct_typ            VARCHAR2(30),
  pdp_cd              VARCHAR2(20),
  dep_typ             VARCHAR2(4),
  acct_char           VARCHAR2(40),
  cust_no             VARCHAR2(20),
  cust_name           VARCHAR2(100),
  ibd_typ             VARCHAR2(4),
  ibd_no              VARCHAR2(20),
  card_no             VARCHAR2(19),
  conntr_no           VARCHAR2(20),
  org_no              VARCHAR2(9),
  ases_org_no         VARCHAR2(9),
  opac_org_no         VARCHAR2(9),
  opac_amt            NUMBER(20,2),
  opac_dt             VARCHAR2(80),
  opac_perm_no        VARCHAR2(15),
  opac_trl_no         VARCHAR2(12),
  cacct_org_no        VARCHAR2(9),
  cacct_dt            VARCHAR2(80),
  cacct_trl_no        VARCHAR2(12),
  intc_flg            VARCHAR2(1),
  curr_char           VARCHAR2(1),
  aval_dt             VARCHAR2(80),
  cacl_dt             VARCHAR2(80),
  fs_sts              VARCHAR2(1),
  prds_instn_dpdw_flg VARCHAR2(1),
  drw_typ             VARCHAR2(4),
  int_tax_flg         VARCHAR2(1),
  acct_ctl_sts        VARCHAR2(50),
  dpdw_rang           VARCHAR2(1),
  com_od_flg          VARCHAR2(1),
  od_int_days_n       INTEGER,
  ddp_pdt             NUMBER(20,2),
  ddp_acct_sts        VARCHAR2(3),
  ddp_od_max          NUMBER(20,2),
  od_int_amt          NUMBER(20,2),
  frz_amt             NUMBER(20,2),
  intc_amt            NUMBER(20,2),
  avl_bal             NUMBER(20,2),
  acct_bal            NUMBER(20,2),
  int_bal             NUMBER(20,2),
  int_acct_no         VARCHAR2(32),
  ltm_pdtc_dt         VARCHAR2(80),
  ltm_intc_dt         VARCHAR2(80),
  ltm_tx_dt           VARCHAR2(80),
  actu_pdt            NUMBER(20,2),
  od_tm               INTEGER,
  od_pdt              NUMBER(20,2),
  od_amt              NUMBER(20,2),
  od_days             INTEGER,
  od_int              NUMBER(20,2),
  ovdln_od_int        NUMBER(20,2),
  od_lg_flg           VARCHAR2(1),
  today_od_csh_amt    NUMBER(20,2),
  ngo_dep_fl_totl     INTEGER,
  ngo_int_acct_no     VARCHAR2(32),
  ngo_aval_dt         VARCHAR2(80),
  ngo_cncl_dt         VARCHAR2(80),
  trt_val             NUMBER(12,6),
  svc_bal             NUMBER(20,2),
  od_csh_amt          NUMBER(20,2),
  intr_cod            VARCHAR2(2),
  intr                NUMBER(12,6),
  fltr_fvr_sign       VARCHAR2(1),
  fltr_fvr            NUMBER(12,6),
  sleep_dt            VARCHAR2(80),
  sleep_sts           VARCHAR2(2),
  less_intr_flg       VARCHAR2(1),
  mafe_flg            VARCHAR2(1),
  mafe_owe_amt        NUMBER(20,2),
  mafe_year           VARCHAR2(2),
  sleep_flg           VARCHAR2(1),
  insp_flg            VARCHAR2(1),
  risk_lvl            VARCHAR2(1),
  psbk_no             INTEGER,
  psbk_prt_no         VARCHAR2(13),
  etl_dt              DATE
);
-- Add comments to the columns 
comment on column F_AGR_DEP_SAP_ACCT.acct_no
  is '账号';
comment on column F_AGR_DEP_SAP_ACCT.curr_cd
  is '币种代码';
comment on column F_AGR_DEP_SAP_ACCT.curr_iden
  is '钞汇类别';
comment on column F_AGR_DEP_SAP_ACCT.acct_typ
  is '账别';
comment on column F_AGR_DEP_SAP_ACCT.pdp_cd
  is '产品代码';
comment on column F_AGR_DEP_SAP_ACCT.dep_typ
  is '存款种类';
comment on column F_AGR_DEP_SAP_ACCT.acct_char
  is '账号性质';
comment on column F_AGR_DEP_SAP_ACCT.cust_no
  is '客户编号';
comment on column F_AGR_DEP_SAP_ACCT.cust_name
  is '客户姓名';
comment on column F_AGR_DEP_SAP_ACCT.ibd_typ
  is '凭证种类';
comment on column F_AGR_DEP_SAP_ACCT.ibd_no
  is '凭证号码';
comment on column F_AGR_DEP_SAP_ACCT.card_no
  is '卡号';
comment on column F_AGR_DEP_SAP_ACCT.conntr_no
  is '联系人编号';
comment on column F_AGR_DEP_SAP_ACCT.org_no
  is '机构编号';
comment on column F_AGR_DEP_SAP_ACCT.ases_org_no
  is '考核机构';
comment on column F_AGR_DEP_SAP_ACCT.opac_org_no
  is '开户机构号';
comment on column F_AGR_DEP_SAP_ACCT.opac_amt
  is '开户金额';
comment on column F_AGR_DEP_SAP_ACCT.opac_dt
  is '开户日期';
comment on column F_AGR_DEP_SAP_ACCT.opac_perm_no
  is '开户许可证号';
comment on column F_AGR_DEP_SAP_ACCT.opac_trl_no
  is '开户柜员号';
comment on column F_AGR_DEP_SAP_ACCT.cacct_org_no
  is '销户机构号';
comment on column F_AGR_DEP_SAP_ACCT.cacct_dt
  is '销户日期';
comment on column F_AGR_DEP_SAP_ACCT.cacct_trl_no
  is '销户柜员号';
comment on column F_AGR_DEP_SAP_ACCT.intc_flg
  is '计息标志';
comment on column F_AGR_DEP_SAP_ACCT.curr_char
  is '钞汇属性';
comment on column F_AGR_DEP_SAP_ACCT.aval_dt
  is '起用日期';
comment on column F_AGR_DEP_SAP_ACCT.cacl_dt
  is '注销日期';
comment on column F_AGR_DEP_SAP_ACCT.fs_sts
  is '综合理财标志';
comment on column F_AGR_DEP_SAP_ACCT.prds_instn_dpdw_flg
  is '约定机构存取标志';
comment on column F_AGR_DEP_SAP_ACCT.drw_typ
  is '支取方式';
comment on column F_AGR_DEP_SAP_ACCT.int_tax_flg
  is '利息税收税标志';
comment on column F_AGR_DEP_SAP_ACCT.acct_ctl_sts
  is '帐户控制状态';
comment on column F_AGR_DEP_SAP_ACCT.dpdw_rang
  is '通兑范围';
comment on column F_AGR_DEP_SAP_ACCT.com_od_flg
  is '法人账户透支标志';
comment on column F_AGR_DEP_SAP_ACCT.od_int_days_n
  is '应收透支息透支天数';
comment on column F_AGR_DEP_SAP_ACCT.ddp_pdt
  is '活存积数';
comment on column F_AGR_DEP_SAP_ACCT.ddp_acct_sts
  is '账户状态';
comment on column F_AGR_DEP_SAP_ACCT.ddp_od_max
  is '账户最大透支额';
comment on column F_AGR_DEP_SAP_ACCT.od_int_amt
  is '计透支息金额';
comment on column F_AGR_DEP_SAP_ACCT.frz_amt
  is '冻结金额';
comment on column F_AGR_DEP_SAP_ACCT.intc_amt
  is '计息金额';
comment on column F_AGR_DEP_SAP_ACCT.avl_bal
  is '可用金额';
comment on column F_AGR_DEP_SAP_ACCT.acct_bal
  is '账户余额';
comment on column F_AGR_DEP_SAP_ACCT.int_bal
  is '利息';
comment on column F_AGR_DEP_SAP_ACCT.int_acct_no
  is '收息账号';
comment on column F_AGR_DEP_SAP_ACCT.ltm_pdtc_dt
  is '上次计算积数日';
comment on column F_AGR_DEP_SAP_ACCT.ltm_intc_dt
  is '上次计息日';
comment on column F_AGR_DEP_SAP_ACCT.ltm_tx_dt
  is '上次交易日期';
comment on column F_AGR_DEP_SAP_ACCT.actu_pdt
  is '实积数';
comment on column F_AGR_DEP_SAP_ACCT.od_tm
  is '透支次数';
comment on column F_AGR_DEP_SAP_ACCT.od_pdt
  is '透支积数';
comment on column F_AGR_DEP_SAP_ACCT.od_amt
  is '透支金额';
comment on column F_AGR_DEP_SAP_ACCT.od_days
  is '透支天数';
comment on column F_AGR_DEP_SAP_ACCT.od_int
  is '透支息';
comment on column F_AGR_DEP_SAP_ACCT.ovdln_od_int
  is '催收透支息';
comment on column F_AGR_DEP_SAP_ACCT.od_lg_flg
  is '透支科目标志';
comment on column F_AGR_DEP_SAP_ACCT.today_od_csh_amt
  is '当日累计透支取现金额';
comment on column F_AGR_DEP_SAP_ACCT.ngo_dep_fl_totl
  is '协议存款档数';
comment on column F_AGR_DEP_SAP_ACCT.ngo_int_acct_no
  is '协议收息账号';
comment on column F_AGR_DEP_SAP_ACCT.ngo_aval_dt
  is '协定存款设定日期';
comment on column F_AGR_DEP_SAP_ACCT.ngo_cncl_dt
  is '协定存款取消日期';
comment on column F_AGR_DEP_SAP_ACCT.trt_val
  is '税率';
comment on column F_AGR_DEP_SAP_ACCT.svc_bal
  is '手续费';
comment on column F_AGR_DEP_SAP_ACCT.od_csh_amt
  is '累计透支取现金额';
comment on column F_AGR_DEP_SAP_ACCT.intr_cod
  is '利率依据';
comment on column F_AGR_DEP_SAP_ACCT.intr
  is '利率';
comment on column F_AGR_DEP_SAP_ACCT.fltr_fvr_sign
  is '浮动利率加减码符号位';
comment on column F_AGR_DEP_SAP_ACCT.fltr_fvr
  is '浮动利率加减码';
comment on column F_AGR_DEP_SAP_ACCT.sleep_dt
  is '睡眠设置日期';
comment on column F_AGR_DEP_SAP_ACCT.sleep_sts
  is '睡眠状态';
comment on column F_AGR_DEP_SAP_ACCT.less_intr_flg
  is '免执行小额利率标志';
comment on column F_AGR_DEP_SAP_ACCT.mafe_flg
  is '免收小额管理费标志';
comment on column F_AGR_DEP_SAP_ACCT.mafe_owe_amt
  is '小额管理费欠收金额';
comment on column F_AGR_DEP_SAP_ACCT.mafe_year
  is '小额管理费扣收年份';
comment on column F_AGR_DEP_SAP_ACCT.sleep_flg
  is '不动户处理标志';
comment on column F_AGR_DEP_SAP_ACCT.insp_flg
  is '年检标志';
comment on column F_AGR_DEP_SAP_ACCT.risk_lvl
  is '风险等级';
comment on column F_AGR_DEP_SAP_ACCT.psbk_no
  is '册号';
comment on column F_AGR_DEP_SAP_ACCT.psbk_prt_no
  is '存单存折印刷号';

加工宽表 写存储过程,存储过程我们需要注意的是。
1.insert不能一条一条插入。需要使用select插入。插入的字段需要与刚刚建立的表字段相同顺序一致字段属性一致。
2.根据甲方提供的需求与项目主题,写出伪代码,

(SAACNAMT a left join SAACNACN b on
  a.FK_SAACN_KEY=b.SA_ACCT_NO
  where substr(a.SA_PDP_CODE,4,3)='SA1' and substr(b.SA_CUST_NO,1,1)='1')
UNION
(SAACNAMT a left join SAACNACN b on
  a.FK_SAACN_KEY=b.SA_ACCT_NO
  where substr(a.SA_PDP_CODE,4,3)='SA0')

根据伪代码写出存储过程,此处给出一个简略的存储过程

CREATE OR REPLACE PROCEDURE SP_F_AGR_DEP_SAP_ACCT  IS
  /*****************************************************************************
     程序名称:SP_F_AGR_DEP_SAP_ACCT
     功能描述:个人活期账户信息宽表
     目 标 表:FDM.F_AGR_DEP_SAE_ACCT  活期企业存款账户信息
     源    表:SDM.SAACNAMT  活存资金档
               SDM.SAACNACN  活期存款主档
     创 建 人:孙云龙
     创建日期:20240620
     修改日期:
     修改人员:
     修改原因:
  ******************************************************************************/

/*存储过程变量定义*/
 V_STARTTIME DATE; --开始时间
 V_ENDTTIME DATE; --结束时间
 V_ROWCOUNT INT; --记录数
 V_SQLCODE  VARCHAR2(200);
 V_SQLERRM  VARCHAR2(1000);
 V_SPNAME VARCHAR2(200);

/* 程序开始执行*/
BEGIN
  /*变量赋值*/
   V_STARTTIME:=sysdate;
   V_SPNAME:='SP_F_AGR_DEP_SAP_ACCT';
  /*插入宽表数据*/
  INSERT INTO FDS.F_AGR_DEP_SAP_ACCT
    SELECT 
    a.FK_SAACN_KEY  ,-- 
    a.SA_CURR_COD ,-- 币别
    a.SA_CURR_IDEN  ,-- 钞汇鉴别
    b.SA_ACCT_TYP ,-- 帐别2
    a.SA_PDP_CODE ,-- 产品代码
    b.SA_DEP_TYP  ,-- 存款种类
    b.SA_ACCT_CHAR  ,-- 帐户性质
    b.SA_CUST_NO  ,-- 客户编号
    b.SA_CUST_NAME  ,-- 客户名称
    b.SA_DOC_TYP  ,-- 凭证种类(DOC)
    b.SA_PSBK_PRT_NO1 ,-- 存折印刷号1
    b.SA_CARD_NO  ,-- 卡号(CARD)
    b.SA_CONNTR_NO  ,-- 联系人编号
    a.SA_BELONG_INSTN_COD ,-- 账户归属机构
    a.SA_ASES_INSTN_COD ,-- 考核机构
    b.SA_OPAC_INSTN_NO  ,-- 开户机构号(OPAC)
    b.SA_OPAC_AMT ,-- 开户金额
    b.SA_OPAC_DT  ,-- 开户日期-X8
    b.SA_OPAC_PERM_NO ,-- 开户许可证号
    b.SA_OPAC_TLR_NO  ,-- 开户柜员号
    b.SA_CACCT_INSTN_NO ,-- 销户机构号
    b.SA_CACCT_DT ,-- 销户日期(CACCT)
    b.SA_CACCT_TLR_NO ,-- 销户柜员号
    b.SA_INTC_FLG ,-- 计息标志
    b.SA_CURR_TYP ,-- 钞汇属性
    b.SA_AVAL_DT  ,-- 起用日期(AVAL)
      '18991231' ,-- 
    b.SA_FS_STS ,-- 综合理财标志
        NULL ,-- 
    b.SA_DRW_TYP  ,-- 支取方式
    b.SA_INT_TAX_FLG  ,-- 利息税计税标志
    b.SA_ACCT_CTL_STS ,-- 帐户控制状态
    b.SA_DW_RANG  ,-- 通兑范围
    a.SA_COM_OD_FLG ,-- 法人帐户透支标志
    a.SA_OD_INT_DAYS_N  ,-- 应收透支息透支天数
    a.SA_DDP_PDT  ,-- 活存积数
    a.SA_DDP_ACCT_STS ,-- 活存帐户状态
    a.SA_DDP_OD_MAX ,-- 活存帐户最大透支额
    a.SA_OD_INT_AMT ,-- 计透支息金额
    a.SA_FRZ_AMT  ,-- 法律冻结金额
    a.SA_INTC_AMT ,-- 贷方计息金额
    a.SA_AVL_BAL  ,-- 可用余额(AVL)
    a.SA_ACCT_BAL ,-- 帐户余额
    a.SA_INT  ,-- 利息(16位)
    a.SA_INT_ACCT_NO  ,-- 利息帐号
    a.SA_LTM_PDTC_DT  ,-- 上次计算积数日
    a.SA_LTM_INTC_DT  ,-- 上次计息日
    a.SA_LTM_TX_DT  ,-- 上次交易日期
    a.SA_ACTU_PDT ,-- 实积数
    a.SA_OD_TM  ,-- 透支次数
    a.SA_OD_PDT ,-- 透支积数(OD)
    a.SA_OD_AMT ,-- 透支金额
    a.SA_OD_DAYS_N  ,-- 透支天数
    a.SA_OD_INT ,-- 透支息(16位)
    a.SA_OVDLN_OD_INT ,-- 催收透支息(16位)
    a.SA_OD_LG_FLG  ,-- 透支科目标志
    a.SA_TODAY_OD_CSH_AMT ,-- 当日累计透支取现金额
    a.SA_NGO_DEP_FL_TOTL  ,-- 协议存款档数
    a.SA_NGO_INT_ACCT_NO  ,-- 协议利息帐号
    a.SA_NGO_AVAL_DT  ,-- 协定存款设定日期
    a.SA_NGO_CNCL_DT  ,-- 协定存款取消日期
    a.SA_TRT_VAL  ,-- 税率(VAL)
    a.SA_SVC  ,-- 手续费
    a.SA_OD_CSH_AMT ,-- 累计透支取现金额(CSH)
    a.SA_INTR_COD ,-- 利率代码
    a.SA_INTR ,-- 利率
    a.SA_FLTR_FVR_SIGN  ,-- 浮动利率加减码符号位
    a.SA_FLTR_FVR ,-- 浮动利率加减码(SC)
    a.SA_SLEEP_DATE ,-- 睡眠设置日期
    a.SA_SLEEP_STS  ,-- 睡眠状态
    a.SA_LESS_INTR_FLG  ,-- 免执行小额利率标志
    a.SA_MAFE_FLG ,-- 免收管理费标志
    a.SA_MAFE_OWE_AMT ,-- 管理费欠费金额
    a.SA_MAFE_YEAR  ,-- 管理费扣收年份
    b.SA_SLEEP_PROC_FLG ,-- 不动户处理标志
    b.SA_INSP_FLG ,-- 年检标志
    b.SA_RISK_LVL ,-- 风险等级
    b.SA_PSBK_NO  ,-- 存折册号
    b.SA_PSBK_PRT_NO ,  -- 存折印刷号
    a.etldt
      FROM SDS.SAACNAMT a left join SDS.SAACNACN b on
            a.FK_SAACN_KEY = b.SA_ACCT_NO --账号
            where substr(a.SA_PDP_CODE, 4, 3) = 'SA1' --产品编号 活期
            and substr(b.SA_CUST_NO, 1, 1) = '1' --1开头的客户编号 个人客户
    UNION
    SELECT 
        a.FK_SAACN_KEY  ,-- 
    a.SA_CURR_COD ,-- 币别
    a.SA_CURR_IDEN  ,-- 钞汇鉴别
    b.SA_ACCT_TYP ,-- 帐别2
    a.SA_PDP_CODE ,-- 产品代码
    b.SA_DEP_TYP  ,-- 存款种类
    b.SA_ACCT_CHAR  ,-- 帐户性质
    b.SA_CUST_NO  ,-- 客户编号
    b.SA_CUST_NAME  ,-- 客户名称
    b.SA_DOC_TYP  ,-- 凭证种类(DOC)
    b.SA_PSBK_PRT_NO1 ,-- 存折印刷号1
    b.SA_CARD_NO  ,-- 卡号(CARD)
    b.SA_CONNTR_NO  ,-- 联系人编号
    a.SA_BELONG_INSTN_COD ,-- 账户归属机构
    a.SA_ASES_INSTN_COD ,-- 考核机构
    b.SA_OPAC_INSTN_NO  ,-- 开户机构号(OPAC)
    b.SA_OPAC_AMT ,-- 开户金额
    b.SA_OPAC_DT  ,-- 开户日期-X8
    b.SA_OPAC_PERM_NO ,-- 开户许可证号
    b.SA_OPAC_TLR_NO  ,-- 开户柜员号
    b.SA_CACCT_INSTN_NO ,-- 销户机构号
    b.SA_CACCT_DT ,-- 销户日期(CACCT)
    b.SA_CACCT_TLR_NO ,-- 销户柜员号
    b.SA_INTC_FLG ,-- 计息标志
    b.SA_CURR_TYP ,-- 钞汇属性
    b.SA_AVAL_DT  ,-- 起用日期(AVAL)
      '18991231' ,-- 
    b.SA_FS_STS ,-- 综合理财标志
        NULL ,-- 
    b.SA_DRW_TYP  ,-- 支取方式
    b.SA_INT_TAX_FLG  ,-- 利息税计税标志
    b.SA_ACCT_CTL_STS ,-- 帐户控制状态
    b.SA_DW_RANG  ,-- 通兑范围
    a.SA_COM_OD_FLG ,-- 法人帐户透支标志
    a.SA_OD_INT_DAYS_N  ,-- 应收透支息透支天数
    a.SA_DDP_PDT  ,-- 活存积数
    a.SA_DDP_ACCT_STS ,-- 活存帐户状态
    a.SA_DDP_OD_MAX ,-- 活存帐户最大透支额
    a.SA_OD_INT_AMT ,-- 计透支息金额
    a.SA_FRZ_AMT  ,-- 法律冻结金额
    a.SA_INTC_AMT ,-- 贷方计息金额
    a.SA_AVL_BAL  ,-- 可用余额(AVL)
    a.SA_ACCT_BAL ,-- 帐户余额
    a.SA_INT  ,-- 利息(16位)
    a.SA_INT_ACCT_NO  ,-- 利息帐号
    a.SA_LTM_PDTC_DT  ,-- 上次计算积数日
    a.SA_LTM_INTC_DT  ,-- 上次计息日
    a.SA_LTM_TX_DT  ,-- 上次交易日期
    a.SA_ACTU_PDT ,-- 实积数
    a.SA_OD_TM  ,-- 透支次数
    a.SA_OD_PDT ,-- 透支积数(OD)
    a.SA_OD_AMT ,-- 透支金额
    a.SA_OD_DAYS_N  ,-- 透支天数
    a.SA_OD_INT ,-- 透支息(16位)
    a.SA_OVDLN_OD_INT ,-- 催收透支息(16位)
    a.SA_OD_LG_FLG  ,-- 透支科目标志
    a.SA_TODAY_OD_CSH_AMT ,-- 当日累计透支取现金额
    a.SA_NGO_DEP_FL_TOTL  ,-- 协议存款档数
    a.SA_NGO_INT_ACCT_NO  ,-- 协议利息帐号
    a.SA_NGO_AVAL_DT  ,-- 协定存款设定日期
    a.SA_NGO_CNCL_DT  ,-- 协定存款取消日期
    a.SA_TRT_VAL  ,-- 税率(VAL)
    a.SA_SVC  ,-- 手续费
    a.SA_OD_CSH_AMT ,-- 累计透支取现金额(CSH)
    a.SA_INTR_COD ,-- 利率代码
    a.SA_INTR ,-- 利率
    a.SA_FLTR_FVR_SIGN  ,-- 浮动利率加减码符号位
    a.SA_FLTR_FVR ,-- 浮动利率加减码(SC)
    a.SA_SLEEP_DATE ,-- 睡眠设置日期
    a.SA_SLEEP_STS  ,-- 睡眠状态
    a.SA_LESS_INTR_FLG  ,-- 免执行小额利率标志
    a.SA_MAFE_FLG ,-- 免收管理费标志
    a.SA_MAFE_OWE_AMT ,-- 管理费欠费金额
    a.SA_MAFE_YEAR  ,-- 管理费扣收年份
    b.SA_SLEEP_PROC_FLG ,-- 不动户处理标志
    b.SA_INSP_FLG ,-- 年检标志
    b.SA_RISK_LVL ,-- 风险等级
    b.SA_PSBK_NO  ,-- 存折册号
    b.SA_PSBK_PRT_NO,   -- 存折印刷号
    a.etldt
      FROM SDS.SAACNAMT a
      left join SDS.SAACNACN b
        on a.FK_SAACN_KEY = b.SA_ACCT_NO
     where substr(a.SA_PDP_CODE, 4, 3) = 'SA0'; --个人活期 2020年之前
     V_ROWCOUNT:=sql%rowcount;  --获取上一条dml语句执行条数
   commit;
   V_ENDTTIME:=sysdate; --结束时间
  --游标  显式游标  定义  打开  遍历   关闭
  --隐式游标  dml语句
  --4个属性: found  notfound  isopen  游标名%rowcount
    /*插入正常日志*/
    insert into splog
    values (V_SPNAME,NULL,NULL,V_STARTTIME,V_ENDTTIME,
    V_ROWCOUNT,'正常' );
    commit; 
 /* 异常处理 */
EXCEPTION
  WHEN OTHERS THEN --捕获系统所有异常
    V_SQLCODE:=sqlcode;
    V_SQLERRM:=sqlerrm;
    /*插入异常日志*/
    insert into splog
    values (V_SPNAME,V_SQLCODE,V_SQLERRM,V_STARTTIME,V_ENDTTIME,
    0,'异常' );
    commit;
END;

在实际运行中,一般都是挂后台的,如果出错误我们没法看到实际的错误报告,因此我们需要将运行记录写进运行日志里,我们的运行日志需要获取以下信息,确保我们跑批结束后能及时发现并且定位错误信息。
存储过程名: V_SPNAME
错误代码: V_SQLCODE
错误信息: V_SQLERRM
存储过程开始时间: V_STARTTIME
存储过程结束时间: V_ENDTTIME
执行任务条数: V_ROWCOUNT
运行状态: ‘正常/异常’

测试提交

使用debug确定存储过程的每一步都没有出错即可

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设有两个表,一个是图书表 books,另一个是学生表 students,它们的结构和部分数据如下: ```mysql -- 图书表 books CREATE TABLE books ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(100) NOT NULL, author VARCHAR(50) NOT NULL, price DECIMAL(8,2) NOT NULL, publish_date DATE NOT NULL ); INSERT INTO books (title, author, price, publish_date) VALUES ('MySQL入门与精通', '张三', 59.90, '2020-01-01'), ('Java编程思想', 'Bruce Eckel', 108.00, '2018-01-01'), ('Python数据分析与挖掘实战', '李四', 89.00, '2019-06-01'), ('深入浅出Node.js', '朱一凡', 59.00, '2017-03-01'), ('算法图解', 'Aditya Bhargava', 49.90, '2018-07-01'); -- 学生表 students CREATE TABLE students ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, gender VARCHAR(10) NOT NULL, age INT NOT NULL, major VARCHAR(50) NOT NULL ); INSERT INTO students (name, gender, age, major) VALUES ('张三', '男', 20, '计算机科学与技术'), ('李四', '女', 19, '软件工程'), ('王五', '男', 21, '物联网工程'), ('赵', '女', 20, '信息管理'), ('钱七', '男', 22, '计算机应用技术'); ``` 现在我们来进行一些子查询的操作。 1. 查询图书表中价格最高的图书的信息 ```mysql SELECT * FROM books WHERE price = (SELECT MAX(price) FROM books); ``` 2. 查询学生表中年龄最大的学生的姓名和专业 ```mysql SELECT name, major FROM students WHERE age = (SELECT MAX(age) FROM students); ``` 3. 查询学生表中专业为“计算机科学与技术”的学生的平均年龄 ```mysql SELECT AVG(age) FROM students WHERE major = '计算机科学与技术'; ``` 4. 查询学生表中不在专业为“计算机科学与技术”和“软件工程”的学生的姓名和专业 ```mysql SELECT name, major FROM students WHERE major NOT IN ('计算机科学与技术', '软件工程'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值