DWB基础数据层>>划分主题,构建宽表
创建宽表
示例: 高端客户表
CREATE TABLE DWB.HIGH_CUST_TAB
AS
SELECT
LN.ECIF_CUST_NO,
LN.CUSTNAME,
LN.ISCOMMAC,
LN.CURRSIGN,
LN.LOANKIND,
LN.LOANTYPE,
LN.FIRSTORDER,
LN.PAYPERC,
LN.FUNDSOUR,
LN.LOANUSE,
LN.ASSUKIND,
LN.CONTDATE,
LN.CREDCAPI,
LN.CYCFLAG,
LN.TCAPI,
LN.THISTCAPI,
LN.TERMFREQ,
LN.TTERM,
LN.RETUTYPE,
LN.TROTHDUEDAY,
LN.FIXRATETERM,
LN.FIRSTDUEDATE,
LN.SUBSFLAG,
LN.ISENOUSUBS,
LN.FIRSTPAYAMT,
LN.FIRSTPAYPERC,
LN.CORPID,
LN.PROJID,
LN.CORPAPPID,
LN.RELEWAY,
LN.PAYEEACNO,
LN.PAYEEACNAME,
LN.PAYEEBANKNAME,
LN.INTECALCKIND,
LN.INTEMETH,
LN.INTEBASE,
LN.AHEADDAYS,
LN.BASICINTERATE,
LN.INTERATE,
LN.INTEFINERATEFLOAT,
LN.CAPIFINERATEFLOAT,
LN.FINERATE,
LN.CAPIFINERATE,
LN.FOULRATE,
LN.EMBERATEFLOAT,
LN.BEGINDATE,
LN.ENDDATE,
LN.LOANACNO,
LN.CONTKIND,
LN.CONTNO,
LN.APPRNAME,
LN.APPRTABNO,
LN.APPRDATE,
LN.APPRFLAG,
LN.APPRSTATE,
LN.LOANSTATE,
CI.CUST_NAME,
CI.BIRTH_DT,
CI.SEX,
CI.MRG_STS,
CI.REGISTER,
CI.PPL_COD,
CI.COU_CERT_NO,
CI.COU_NAME,
CI.RELIGION,
CI.EDUC_LEV,
CI.HOUSE_TYP,
CI.INDV_TAX_NO,
CI.INDV_INSURS_NO,
CI.HAVE_WORK_YR,
CI.OCCUP_COD,
CI.QUALIFICATION_STS,
CI.EMPLOYER_NAME,
CI.UNIT_CHAR,
CI.UNIT_WORK_DT,
CI.WORK_NO,
CI.POSN,
CI.OFRN,
CI.TITL,
CI.MN_INCO,
CI.ECON_RESUR,
CI.OTH_ECON_RESUR,
CI.DEPEND_CNT,
CI.LANGUAGE_PRE,
CI.AFF_INSTN_NO,
CI.CUST_MNGR_COD,
CI.CUST_STS,
CI.EMP_FLG,
CI.POT_VIP_FLG,
CI.SPEC_VIP_FLG,
CI.INDV_CUST_ACCUM_TRN_LMT,
CI.CRED_CRD_GUAR_CNT,
CI.FAMI_AVG_MN_INCO,
CI.FAMI_CAPI,
CI.FAMI_DEBT,
CI.FAMI_MN_INCO,
CI.GRAD_DT,
CI.CHILD_FLG,
CI.INDUSTRY_TYP,
CI.FAMI_GUAR_TOTL,
CI.PLAN_CPTL_CERT_NO,
CI.STUDY_INST,
CI.STUDY_SPEC,
CI.RESI_YR,
CI.CERT_TYP,
CI.CERT_NO,
CI.PRIM_NAT,
CI.RSDNT_NAT,
CI.CONC_CUST_FLG,
CI.BEST_CONT_TM,
CI.BEST_CONT_STY,
CHILI.INDV_LEV_TYP,
CHILI.EVAL_INSTN,
CHILI.EVAL_DT,
CHILI.INDV_LEV_COD,
CHILI.CRLMT,
CHILI.CRED_LOTP,
CHILI.EVAL_VAL,
CHILI.EVAL_DESC,
CHILI.BANK_ID,
CHILI.EXT_SYS_CUST_NO,
CHILI.EXT_SYS_NO,
CHPAR.PTY_ADDR_RELA_TYP,
CHPAR.ADDR_ID
FROM DWD.LN_LNP_CTRT_CBAPP LN
INNER JOIN DWD.CI_CIPH_HIGH_CUST_INFO CI
ON LN.ECIF_CUST_NO = CI.ECIF_CUST_NO
INNER JOIN DWD.CI_CIPH_HIGH_INDV_LEV_INFO CHILI
ON CHILI.ECIF_CUST_NO = CI.ECIF_CUST_NO
INNER JOIN DWD.CI_CIPH_HIGH_PTY_ADDR_RELA CHPAR
ON CHPAR.ECIF_CUST_NO = CI.ECIF_CUST_NO;
分析
用到的表:
CI_CIPH_HIGH_CUST_INFO; 个人高端客户信息>>连接字段ECIF_CUST_NO
CI_CIPH_HIGH_INDV_LEV_INFO; 个人高端个人等级信息表>>连接字段ECIF_CUST_NO
CI_CIPH_HIGH_PTY_ADDR_RELA ;个人高端参与人和联系地址的关系>>连接字段ECIF_CUST_NO
LN_LNP_CTRT_CBAPP; 个人贷款申请信息档>>连接字段 ECIF_CUST_NO
主表: 个人贷款申请信息档
只有申请成功才是客户>>连接方式: 内连接
字段选择>有重复字段
先选择全部字段>>复制到excell表>>全选数据>>分列>>按照分隔符分列>>其他:输入' . '
分列之后
给最后一个字段加逗号,保持数据一致>>给重复列设置高亮>>删除重复项(保留主表的字段)>>合并两个列的内容>>复制到oarcle的sql执行区
分列结果
给最后一个字段加逗号, 保持所有数据一致
合并2个列的内容>> =第一个单元格地址"."第二个单元格地址
往下拖动
给宽表添加注释
DECLARE
-- 宽表字段来源
CURSOR COLS_LIST IS
SELECT
*
FROM DBA_COL_COMMENTS
WHERE OWNER = 'DWD'
AND TABLE_NAME IN
('LN_LNP_CTRT_CBAPP','CI_CIPH_HIGH_CUST_INFO','CI_CIPH_HIGH_INDV_LEV_INFO','CI_CIPH_HIGH_PTY_ADDR_RELA');
-- 宽表字段
CURSOR MY_COL IS
SELECT
COLUMN_NAME
FROM DBA_TAB_COLS
WHERE OWNER = 'DWB'
AND TABLE_NAME = 'HIGH_CUST_TAB';
V_SQL VARCHAR2(3000);
BEGIN
FOR V IN COLS_LIST LOOP -----外层循环遍历COLS_LIST游标的字段及注释
FOR X IN MY_COL LOOP -----内层循环遍历MY_COL游标中的字段
IF V.COLUMN_NAME = X.COLUMN_NAME THEN
V_SQL := 'COMMENT ON COLUMN DWB.HIGH_CUST_TAB.'||V.COLUMN_NAME||' IS'||''''||V.COMMENTS||'''';
EXECUTE IMMEDIATE V_SQL;
END IF;
END LOOP;
END LOOP;
END;
分析
给表的每一个字段添加注释>>字段数量多>>PLSQL批量添加>>使用游标循环获取
2个游标:
1个是获取DWD用户指定表的字段的字段及注释
1个是获取DWB用户宽表的字段
查询/获取字段注释>>DBA_COL_COMMENTS视图>>属于系统表,前面不需要加用户名;
基于DWD用户的表创建的宽表>>用 owner = 'DWD'过滤, 用 in 筛选想要的表
oracle中给表字段添加注释的语法
注意: 单引号在PLSQL中拼接时需要转义字符 '