create or replace package body NETS_TCIMS_PC_TRANSFORM
IS
list_TAB_SCR_TYPE_PATTERN_D TAB_SCR_TYPE_PATTERN_D;
list_TAB_TMP_TYPE_PATTERN_D TAB_TMP_SCR_TYPE_PATTERN_D;
/***********************************************************
--功能说明: 转换、标识 上海异地车
--参数说明:
--调用函数:
--修改记录: ex-liujiali001
--注意事项: 此项操作 必须在 电话号码清洗 操作后执行 (其中有一个号码匹配也行)
--*********************************************************/
PROCEDURE SP_TRANSFORM_SH_YDC_FLAG
IS
p_id NUMBER; -- 日志记录id
p_errmsg VARCHAR2(500); -- 错误记录
BEGIN
-- 操作记录
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,29,NULL,'01',NULL,NULL,NULL,NULL);
--清空结果临时表
NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_SH_YDC_FLAG_STG_TMP');
--抽取记录编号、机构、电话字段 数据
INSERT /*+APPEND*/
INTO PC_CLEAN_SH_YDC_FLAG_1_TMP
(
SYS_ID,
SECONDARY_ORG,
TEL_NO
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2) PARALLEL(C 2)*/
A.SYS_ID SYS_ID,
TO_SINGLE_BYTE(TRIM(A.SECONDARY_ORG)) SECONDARY_ORG,
B.TEL_NO TEL_NO
FROM IDL_SEP_SRC_DATA A,
(SELECT SPLIT_SYSID, SYS_ID, CODE, TEL_NO, CITY, CLEAN_STATUS
FROM PC_CLEAN_TEL_NO_STG_TMP
WHERE CODE IS NULL) B, --使用的分开的电话号码
IDL_EX_BATCH C
WHERE A.SYS_ID = B.SYS_ID(+)
AND A.TCIMS_BATCH_ID = C.TCIMS_BATCH_ID
AND C.SERIES_TYPE = '01'
AND C.BATCH_STATUS = '11'
AND C.PREPARE_FLAG = '1';
COMMIT;
--筛选指定的二级机构
INSERT /*+APPEND*/
INTO PC_CLEAN_SH_YDC_FLAG_2_TMP
(
SYS_ID,
TEL_NO
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
A.TEL_NO
FROM PC_CLEAN_SH_YDC_FLAG_1_TMP A,
BDL_RULE_YDC_ORG B
WHERE A.SECONDARY_ORG = B.SECONDARY_ORG_code;
COMMIT;
--筛选电话号码 PC_CLEAN_TEL_NO_STG_TMP 电话号码表 code 为空 即为手机
INSERT /*+APPEND*/
INTO PC_CLEAN_SH_YDC_FLAG_3_TMP
(
SYS_ID,
CITY,
SECONDARY_ORG,
THIRD_ORG,
LIST_TYPE
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID SYS_ID,
'202001' CITY, --上海
'202' SECONDARY_ORG, --上海
'202001' THIRD_ORG, --上海
'YDC' LIST_TYPE --修改名单类型 非新加标识 '上海YDC' SH_YDC_FLAG
FROM PC_CLEAN_SH_YDC_FLAG_2_TMP A,
BDL_RULE_CITY_REF_TEL B
WHERE SUBSTR(A.TEL_NO,1,B.BEGINNO_LEN) >= B.BEGINNO
AND SUBSTR(A.TEL_NO,1,B.ENDNO_LEN) <= B.ENDNO
AND B.CITY = '202001';
COMMIT;
-- 更新 stg 表
INSERT /*+APPEND*/
INTO PC_CLEAN_SH_YDC_FLAG_STG_TMP
(
SYS_ID,
CITY,
SECONDARY_ORG,
THIRD_ORG,
LIST_TYPE
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID SYS_ID,
NVL(B.CITY,A.CITY) CITY,
NVL(B.SECONDARY_ORG,A.SECONDARY_ORG) SECONDARY_ORG,
NVL(B.THIRD_ORG,A.THIRD_ORG) THIRD_ORG,
NVL(B.LIST_TYPE,A.LIST_TYPE) LIST_TYPE
FROM IDL_SEP_SRC_DATA A,
(SELECT DISTINCT SYS_ID,LIST_TYPE,CITY,SECONDARY_ORG,THIRD_ORG
FROM PC_CLEAN_SH_YDC_FLAG_3_TMP) B
WHERE A.SYS_ID = B.SYS_ID(+);
COMMIT;
-- 更新本次操作日志
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,29,NULL,'02',NULL,NULL,NULL,NULL);
EXCEPTION
WHEN OTHERS THEN
p_errmsg := substr(sqlerrm,1,500);
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,29,NULL,'03',p_errmsg,NULL,NULL,NULL);
RAISE;
END SP_TRANSFORM_SH_YDC_FLAG;
/***********************************************************
--功能说明: 清洗、转换 电销结果
--参数说明:
--调用函数:
--修改记录: ex-liujiali001
--*********************************************************/
PROCEDURE SP_CLEAN_TRANSFORM_SALE_RESULT
IS
p_id NUMBER; -- 日志记录id
p_errmsg VARCHAR2(500); -- 错误记录
BEGIN
-- 操作记录
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,23,NULL,'01',NULL,NULL,NULL,NULL);
--清空结果临时表
NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_SALE_RESULT_STG_TMP');
--抽取数据,并清除特殊字符 去回车、Tab,全半角空格
INSERT /*+APPEND*/
INTO PC_CLEAN_SALE_RESULT_1_TMP
(
SYS_ID,
C51_PHONE_RESULT,
C51_SALE_STAGE,
C51_SALE_DECISION,
C51_ADDED_EXPLAIN,
C01_PHONE_RESULT,
C01_SALE_STAGE,
C01_SALE_DECISION,
C01_ADDED_EXPLAIN
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID SYS_ID,
REPLACE(REPLACE(REPLACE(TO_SINGLE_BYTE(A.C51_PHONE_RESULT), CHR(13), ''), CHR(10), ''),' ','') C51_PHONE_RESULT,
REPLACE(REPLACE(REPLACE(TO_SINGLE_BYTE(A.C51_SALE_STAGE), CHR(13), ''), CHR(10), ''),' ','') C51_SALE_STAGE,
REPLACE(REPLACE(REPLACE(TO_SINGLE_BYTE(A.C51_SALE_DECISION), CHR(13), ''), CHR(10), ''),' ','') C51_SALE_DECISION,
REPLACE(REPLACE(REPLACE(TO_SINGLE_BYTE(A.C51_ADDED_EXPLAIN), CHR(13), ''), CHR(10), ''),' ','') C51_ADDED_EXPLAIN,
REPLACE(REPLACE(REPLACE(TO_SINGLE_BYTE(A.C01_PHONE_RESULT), CHR(13), ''), CHR(10), ''),' ','') C01_PHONE_RESULT,
REPLACE(REPLACE(REPLACE(TO_SINGLE_BYTE(A.C01_SALE_STAGE), CHR(13), ''), CHR(10), ''),' ','') C01_SALE_STAGE,
REPLACE(REPLACE(REPLACE(TO_SINGLE_BYTE(A.C01_SALE_DECISION), CHR(13), ''), CHR(10), ''),' ','') C01_SALE_DECISION,
REPLACE(REPLACE(REPLACE(TO_SINGLE_BYTE(A.C01_ADDED_EXPLAIN), CHR(13), ''), CHR(10), ''),' ','') C01_ADDED_EXPLAIN
FROM IDL_SEP_SRC_DATA A,
IDL_EX_BATCH B
WHERE A.TCIMS_BATCH_ID = B.TCIMS_BATCH_ID
AND B.SERIES_TYPE = '01'
AND B.BATCH_STATUS = '11'
AND B.PREPARE_FLAG = '1';
COMMIT;
-- 匹配电销结果代码 确定子任务电销结果分类
INSERT /*+APPEND*/
INTO PC_CLEAN_SALE_RESULT_2_TMP
(
SYS_ID,
C51_SALE_RESULT_CLASS,
C01_SALE_RESULT_CLASS
)
SELECT /*+PARALLEL(A 4)*/
A.SYS_ID SYS_ID,
( SELECT DISTINCT B.SALE_RESULT_CLASS_CODE
FROM BDL_RULE_SALE_RESULT_RELATION B
WHERE B.PHONE_RESULT_CODE||B.SALE_STAGE_CODE||B.SALE_DECISION_CODE =
NVL2(B.PHONE_RESULT_CODE,A.C51_PHONE_RESULT,'')||
NVL2(B.SALE_STAGE_CODE,A.C51_SALE_STAGE,'')||
NVL2(B.SALE_DECISION_CODE,A.C51_SALE_DECISION,'')
) C51_SALE_RESULT_CLASS,
( SELECT DISTINCT B.SALE_RESULT_CLASS_CODE
FROM BDL_RULE_SALE_RESULT_RELATION B
WHERE B.PHONE_RESULT_CODE||B.SALE_STAGE_CODE||B.SALE_DECISION_CODE =
NVL2(B.PHONE_RESULT_CODE,A.C01_PHONE_RESULT,'')||
NVL2(B.SALE_STAGE_CODE,A.C01_SALE_STAGE,'')||
NVL2(B.SALE_DECISION_CODE,A.C01_SALE_DECISION,'')
) C01_SALE_RESULT_CLASS
FROM PC_CLEAN_SALE_RESULT_1_TMP A;
COMMIT;
-- 匹配 电销结果分类
INSERT /*+APPEND*/
INTO PC_CLEAN_SALE_RESULT_3_TMP
(
SYS_ID,
C51_SALE_RESULT_CLASS,
C01_SALE_RESULT_CLASS,
SALE_RESULT_CLASS
)
SELECT /*+PARALLEL(A 4)*/
A.SYS_ID SYS_ID,
A.C51_SALE_RESULT_CLASS,
A.C01_SALE_RESULT_CLASS,
(SELECT B.SALE_RESULT_CLASS
FROM BDL_RULE_SALE_RESULT_CLASS_REL B
WHERE B.C01_SALE_RESULT_CLASS||B.C51_SALE_RESULT_CLASS =
A.C01_SALE_RESULT_CLASS||A.C51_SALE_RESULT_CLASS) SALE_RESULT_CLASS
FROM PC_CLEAN_SALE_RESULT_2_TMP A;
COMMIT;
-- 标识 记录中 电销结果分类 及无效电销结果
INSERT /*+APPEND*/
INTO PC_CLEAN_SALE_RESULT_STG_TMP
(
SYS_ID,
C51_PHONE_RESULT,
C51_SALE_STAGE,
C51_SALE_DECISION,
C51_ADDED_EXPLAIN,
C01_PHONE_RESULT,
C01_SALE_STAGE,
C01_SALE_DECISION,
C01_ADDED_EXPLAIN,
C51_SALE_RESULT_CLASS,
C01_SALE_RESULT_CLASS,
SALE_RESULT_CLASS,
CLEAN_STATUS
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID SYS_ID,
A.C51_PHONE_RESULT,
A.C51_SALE_STAGE,
A.C51_SALE_DECISION,
A.C51_ADDED_EXPLAIN,
A.C01_PHONE_RESULT,
A.C01_SALE_STAGE,
A.C01_SALE_DECISION,
A.C01_ADDED_EXPLAIN,
B.C51_SALE_RESULT_CLASS,
B.C01_SALE_RESULT_CLASS,
B.SALE_RESULT_CLASS,
CASE
WHEN B.SYS_ID IS NULL THEN
'0'
ELSE
'1'
END CLEAN_STATUS
FROM PC_CLEAN_SALE_RESULT_1_TMP A,
PC_CLEAN_SALE_RESULT_3_TMP B
WHERE A.SYS_ID = B.SYS_ID(+);
COMMIT;
-- 更新本次操作日志
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,23,NULL,'02',NULL,NULL,NULL,NULL);
EXCEPTION
WHEN OTHERS THEN
p_errmsg := substr(sqlerrm,1,500);
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,23,NULL,'03',p_errmsg,NULL,NULL,NULL);
RAISE;
END SP_CLEAN_TRANSFORM_SALE_RESULT;
/***********************************************************
--功能说明: 清洗、转换 客户分类
--参数说明:
--调用函数:
--修改记录: ex-liujiali001
--注意事项: 本操作 须在 《清洗、转换 电销结果》 <转换、标识 上海异地车> 后执行
--*********************************************************/
PROCEDURE SP_CLEAN_TRANSFORM_CUST_CLASS
IS
p_id NUMBER; -- 日志记录id
p_errmsg VARCHAR2(500); -- 错误记录
BEGIN
-- 操作记录
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,30,NULL,'01',NULL,NULL,NULL,NULL);
--清空结果临时表
NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_CUST_CLASS_STG_TMP');
-- 获取 电销结果分类 、名单类型 数据
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_CLASS_1_TMP
(
SYS_ID,
LIST_TYPE,
VEHICLE_NO,
IS_CONTACTED,
BIZ_MODEL,
SUB_BIZMODEL,
SALE_RESULT_CLASS,
VEHICLE_NO_INTEGRITY,
CUST_CLASS
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2) PARALLEL(C 2) PARALLEL(D 2) PARALLEL(E 2)*/
A.SYS_ID,
NVL(D.LIST_TYPE,replace(A.LIST_TYPE,'/','')) LIST_TYPE,
NVL(C.VEHICLE_NO,A.VEHICLE_NO) VEHICLE_NO,
A.IS_CONTACTED,
A.BIZ_MODEL,
replace(A.SUB_BIZMODEL,'/','') SUB_BIZMODEL,
NVL(B.SALE_RESULT_CLASS,replace(A.SALE_RESULT_CLASS,'/','')) SALE_RESULT_CLASS,
NVL(C.VEHICLE_NO_INTEGRITY,0) VEHICLE_NO_INTEGRITY,
'' CUST_CLASS
FROM IDL_SEP_SRC_DATA A,
(SELECT SYS_ID, C51_PHONE_RESULT, C51_SALE_STAGE, C51_SALE_DECISION, C51_ADDED_EXPLAIN,
C01_PHONE_RESULT, C01_SALE_STAGE, C01_SALE_DECISION, C01_ADDED_EXPLAIN,
C51_SALE_RESULT_CLASS, C01_SALE_RESULT_CLASS, SALE_RESULT_CLASS, CLEAN_STATUS
FROM PC_CLEAN_SALE_RESULT_STG_TMP
WHERE CLEAN_STATUS = '1' ) B,
(SELECT SYS_ID, VEHICLE_NO, CITY, CLEAN_STATUS, VEHICLE_NO_INTEGRITY
FROM PC_CLEAN_VEHICLE_NO_STG_TMP
WHERE CLEAN_STATUS = '1' ) C,
PC_CLEAN_SH_YDC_FLAG_STG_TMP D,
IDL_EX_BATCH E
WHERE A.SYS_ID = B.SYS_ID(+)
AND A.SYS_ID = C.SYS_ID(+)
AND A.SYS_ID = D.SYS_ID(+)
AND A.TCIMS_BATCH_ID = E.TCIMS_BATCH_ID
AND E.SERIES_TYPE = '01'
AND E.BATCH_STATUS = '11'
AND E.PREPARE_FLAG = '1';
COMMIT;
-- 与规则匹配 标识 客户分类 优先级 1 原有客户分类的是否要处理
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_CLASS_2_TMP
(
SYS_ID,
CUST_CLASS
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
B.CUST_CLASS
FROM PC_CLEAN_CUST_CLASS_1_TMP A,
BDL_RULE_CUST_CLASS B
WHERE (B.SALE_RESULT_CLASS IS NULL OR INSTR(B.SALE_RESULT_CLASS,A.SALE_RESULT_CLASS) > 0)
AND (B.IS_CONTACTED IS NULL OR INSTR(B.IS_CONTACTED,A.IS_CONTACTED) > 0)
AND (B.BIZ_MODEL IS NULL OR INSTR(B.BIZ_MODEL,A.BIZ_MODEL) > 0)
AND (B.SUB_BIZMODEL IS NULL OR INSTR(B.SUB_BIZMODEL,A.SUB_BIZMODEL) > 0)
AND INSTR(B.LIST_TYPE,A.LIST_TYPE) > 0
AND B.PRIORITY = '1';
COMMIT;
-- 与规则匹配 标识 客户分类 优先级 2
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_CLASS_2_TMP
(
SYS_ID,
CUST_CLASS
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2) PARALLEL(C 2)*/
A.SYS_ID,
C.CUST_CLASS
FROM BDL_RULE_CRM_A_CLASS_CUST B,
PC_CLEAN_CUST_CLASS_1_TMP A,
BDL_RULE_CUST_CLASS C
WHERE A.VEHICLE_NO = B.VEHICLE_NO
AND INSTR(C.LIST_TYPE,A.LIST_TYPE) > 0
AND A.VEHICLE_NO_INTEGRITY = '1'
AND NOT EXISTS(SELECT 1 FROM PC_CLEAN_CUST_CLASS_2_TMP D
WHERE D.SYS_ID = A.SYS_ID)
AND C.COMPARE_RULE = '1'
AND C.PRIORITY = '2';
COMMIT;
-- 与规则匹配 标识 客户分类 优先级 3
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_CLASS_2_TMP
(
SYS_ID,
CUST_CLASS
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
B.CUST_CLASS
FROM PC_CLEAN_CUST_CLASS_1_TMP A,
BDL_RULE_CUST_CLASS B
WHERE (B.SALE_RESULT_CLASS IS NULL OR INSTR(B.SALE_RESULT_CLASS,A.SALE_RESULT_CLASS) > 0)
AND (B.IS_CONTACTED IS NULL OR INSTR(B.IS_CONTACTED,A.IS_CONTACTED) > 0)
AND (B.BIZ_MODEL IS NULL OR INSTR(B.BIZ_MODEL,A.BIZ_MODEL) > 0)
AND (B.SUB_BIZMODEL IS NULL OR INSTR(B.SUB_BIZMODEL,A.SUB_BIZMODEL) > 0)
AND INSTR(B.LIST_TYPE,A.LIST_TYPE) > 0
AND NOT EXISTS(SELECT 1 FROM PC_CLEAN_CUST_CLASS_2_TMP D
WHERE D.SYS_ID = A.SYS_ID)
AND B.PRIORITY = '3';
COMMIT;
-- 与规则匹配 标识 客户分类 优先级 4
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_CLASS_2_TMP
(
SYS_ID,
CUST_CLASS
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
B.CUST_CLASS
FROM PC_CLEAN_CUST_CLASS_1_TMP A,
BDL_RULE_CUST_CLASS B
WHERE (B.SALE_RESULT_CLASS IS NULL OR INSTR(B.SALE_RESULT_CLASS,A.SALE_RESULT_CLASS) > 0)
AND (B.IS_CONTACTED IS NULL OR INSTR(B.IS_CONTACTED,A.IS_CONTACTED) > 0)
AND (B.BIZ_MODEL IS NULL OR INSTR(B.BIZ_MODEL,A.BIZ_MODEL) > 0)
AND (B.SUB_BIZMODEL IS NULL OR INSTR(B.SUB_BIZMODEL,A.SUB_BIZMODEL) > 0)
AND INSTR(B.LIST_TYPE,A.LIST_TYPE) > 0
AND NOT EXISTS(SELECT 1 FROM PC_CLEAN_CUST_CLASS_2_TMP D
WHERE D.SYS_ID = A.SYS_ID)
AND B.PRIORITY = '4';
COMMIT;
-- 与规则匹配 标识 客户分类 优先级 5
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_CLASS_2_TMP
(
SYS_ID,
CUST_CLASS
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
B.CUST_CLASS
FROM PC_CLEAN_CUST_CLASS_1_TMP A,
BDL_RULE_CUST_CLASS B
WHERE (B.SALE_RESULT_CLASS IS NULL OR INSTR(B.SALE_RESULT_CLASS,A.SALE_RESULT_CLASS) > 0)
AND (B.IS_CONTACTED IS NULL OR INSTR(B.IS_CONTACTED,A.IS_CONTACTED) > 0)
AND (B.BIZ_MODEL IS NULL OR INSTR(B.BIZ_MODEL,A.BIZ_MODEL) > 0)
AND (B.SUB_BIZMODEL IS NULL OR INSTR(B.SUB_BIZMODEL,A.SUB_BIZMODEL) > 0)
AND INSTR(B.LIST_TYPE,A.LIST_TYPE) > 0
AND NOT EXISTS(SELECT 1 FROM PC_CLEAN_CUST_CLASS_2_TMP D
WHERE D.SYS_ID = A.SYS_ID)
AND B.PRIORITY = '5';
COMMIT;
-- 与规则匹配 标识 客户分类 优先级 8
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_CLASS_2_TMP
(
SYS_ID,
CUST_CLASS
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
B.CUST_CLASS
FROM PC_CLEAN_CUST_CLASS_1_TMP A,
BDL_RULE_CUST_CLASS B
WHERE INSTR(B.LIST_TYPE,A.LIST_TYPE) > 0
AND NOT EXISTS(SELECT 1 FROM PC_CLEAN_CUST_CLASS_2_TMP D
WHERE D.SYS_ID = A.SYS_ID)
AND B.PRIORITY = '8';
COMMIT;
---- 整理 标识 客户分类
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_CLASS_STG_TMP
(
SYS_ID,
CUST_CLASS
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
B.CUST_CLASS
FROM PC_CLEAN_CUST_CLASS_1_TMP A,
PC_CLEAN_CUST_CLASS_2_TMP B
WHERE A.SYS_ID = B.SYS_ID(+);
COMMIT;
-- 更新本次操作日志
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,30,NULL,'02',NULL,NULL,NULL,NULL);
EXCEPTION
WHEN OTHERS THEN
p_errmsg := substr(sqlerrm,1,500);
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,30,NULL,'03',p_errmsg,NULL,NULL,NULL);
RAISE;
END SP_CLEAN_TRANSFORM_CUST_CLASS;
/***********************************************************
--功能说明: 合并清洗后的 CITY/客户身份证件号码/车牌号码
/联系人地址/电话号码 供地区标识使用
--参数说明:
--调用函数:
--修改记录: EX-LIUJIALI001
--注意事项: 顺序在清洗功能完成之后 , 地区标识 之前
--*********************************************************/
PROCEDURE SP_UNITE_FIELD_FOR_AREA_INFO
IS
P_ID NUMBER; -- 日志记录ID
P_ERRMSG VARCHAR2(500); -- 错误记录
BEGIN
-- 操作记录
NETS_TCIMS_COMM.SP_LOG_RECORDER(P_ID,25,NULL,'01',NULL,NULL,NULL,NULL);
--清空结果临时表
NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_UNITE_MANY_FIELD_1_STG_TMP');
-- 合并清洗结果,并进行记录有效性标识(出现需要手工清洗的字段即为无效,目前只有车牌号码、电话号码)
INSERT /*+APPEND*/
INTO PC_UNITE_MANY_FIELD_1_STG_TMP
( SYS_ID,
CITY,
ID_NUMBER,
VEHICLE_NO,
ADDRESS,
TEL_NO,
STATUS)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2) PARALLEL(C 2) PARALLEL(D 2) PARALLEL(E 2) PARALLEL(F 2)*/
A.SYS_ID,
A.CITY,
B.ID_NUMBER,
C.VEHICLE_NO,
D.ADDRESS,
--E.CODE,
E.TEL_NO,
CASE
WHEN C.SYS_ID IS NULL OR E.SYS_ID IS NULL THEN
'0'
ELSE
'1'
END STATUS
FROM IDL_SEP_SRC_DATA A,
(SELECT SYS_ID, ID_NUMBER, CLEAN_STATUS, SEX, CUST_DOB
FROM PC_CLEAN_ID_NUMBER_STG_TMP
WHERE CLEAN_STATUS = '1') B, --身份证号码
(SELECT SYS_ID, VEHICLE_NO, CITY, CLEAN_STATUS, VEHICLE_NO_INTEGRITY
FROM PC_CLEAN_VEHICLE_NO_STG_TMP
WHERE CLEAN_STATUS = '1') C, --车牌号码
(SELECT SYS_ID, ADDRESS, IS_ADDRESS_VALID
FROM PC_CLEAN_ADDRESS_STG_TMP
WHERE IS_ADDRESS_VALID = '1') D, --联系人地址
(SELECT SYS_ID, TEL_NO, CITY, CLEAN_STATUS
FROM PC_CLEAN_TELEPHONE_STG_TMP
WHERE CLEAN_STATUS = '1') E, --电话号码(使用合并的电话号码)
IDL_EX_BATCH F
--PC_CLEAN_TEL_NO_STG_TMP E --电话号码
WHERE A.SYS_ID = B.SYS_ID(+)
AND A.SYS_ID = C.SYS_ID(+)
AND A.SYS_ID = D.SYS_ID(+)
AND A.SYS_ID = E.SYS_ID(+)
AND A.TCIMS_BATCH_ID = F.TCIMS_BATCH_ID
AND F.SERIES_TYPE = '01'
AND F.BATCH_STATUS = '11'
AND F.PREPARE_FLAG = '1';
COMMIT;
-- 更新本次操作日志
NETS_TCIMS_COMM.SP_LOG_RECORDER(P_ID,25,NULL,'02',NULL,NULL,NULL,NULL);
EXCEPTION
WHEN OTHERS THEN
P_ERRMSG := SUBSTR(SQLERRM,1,500);
NETS_TCIMS_COMM.SP_LOG_RECORDER(P_ID,25,NULL,'03',P_ERRMSG,NULL,NULL,NULL);
RAISE;
END SP_UNITE_FIELD_FOR_AREA_INFO;
/***********************************************************
--功能说明: 地区标识
--参数说明:
--调用函数:
--修改记录: create by ex-qiuweisheng001/ex-liujiali001
--注意事项: 必须在 NETS_TCIMS_PC_TRANSFORM.SP_UNITE_FIELD_FOR_AREA_INFO 执行完后,才能执行
--*********************************************************/
PROCEDURE SP_CLEAN_TRANSFORM_AREA_INFO
IS
list_CITY_NAME Tab_CITY_NAME;
CURSOR CUR_SCR_TYPE_PATTERN_D(v_CITY_NAME VARCHAR2) IS
SELECT CITY ,
ID_NUMBER ,
VEHICLE_NO ,
VEHICLE_NO_NOTLIKE,
ADDRESS ,
ADDRESS_NOTLIKE ,
TELEPHONE_NUMBER ,
AREA_FLAG
FROM BDL_RULE_REF_AREA_FLAG_2
WHERE CITY = v_CITY_NAME;
p_id NUMBER; -- 日志记录id
p_errmsg VARCHAR2(500); -- 错误记录
BEGIN
-- 操作记录
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,28,NULL,'01',NULL,NULL,NULL,NULL);
--清空结果临时表
NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_CRM_AREA_FLAG_STG_TMP');
--地区标识(不可直接使用LIKE,需要经过解析),其中CITY_NAME与NDC_REF_AREA_FLAG_1互斥
SELECT CITY BULK COLLECT
INTO list_CITY_NAME
FROM (SELECT DISTINCT CITY FROM BDL_RULE_REF_AREA_FLAG_2
INTERSECT
SELECT DISTINCT CITY FROM PC_UNITE_MANY_FIELD_1_STG_TMP); --单行电话记录
FOR i IN 1 .. list_CITY_NAME.COUNT LOOP
OPEN CUR_SCR_TYPE_PATTERN_D(list_CITY_NAME(i));
FETCH CUR_SCR_TYPE_PATTERN_D BULK COLLECT
INTO list_TAB_SCR_TYPE_PATTERN_D;
CLOSE CUR_SCR_TYPE_PATTERN_D;
IF list_TAB_SCR_TYPE_PATTERN_D.COUNT > 0 THEN
DELETE FROM PC_CLEAN_CRM_AREA_FLAG_1_TMP;
COMMIT;
DELETE FROM PC_SCR_TYPE_PATTERN_D_TMP;
COMMIT;
--解析规则
TRY_FORMAT_SCR_RULES;
COMMIT;
SELECT CITY,
ID_NUMBER,
ID_NUMBER_LIST,
VEHICLE_NO,
VEHICLE_NO_LIST,
VEHICLE_NO_NOTLIKE,
VEHICLE_NO_NOTLIKE_LIST,
ADDRESS,
ADDRESS_LIST,
ADDRESS_NOTLIKE,
ADDRESS_NOTLIKE_LIST,
TELEPHONE_NUMBER,
EXEC_TEL_NO_LIST,
CRM_AREA BULK COLLECT
INTO list_TAB_TMP_TYPE_PATTERN_D
FROM PC_SCR_TYPE_PATTERN_D_TMP;
INSERT /*+APPEND*/
INTO PC_CLEAN_CRM_AREA_FLAG_1_TMP
(
SYS_ID,
CRM_AREA_FLAG
)
SELECT /*+PARALLEL(A,4)*/
A.SYS_ID,
TRY_MATCH_AREA_FLAG(A.ID_NUMBER ,A.VEHICLE_NO ,A.VEHICLE_NO ,
A.ADDRESS ,A.ADDRESS ,A.TEL_NO) CRM_AREA_FLAG
FROM PC_UNITE_MANY_FIELD_1_STG_TMP A
WHERE A.CITY = list_CITY_NAME(i);
COMMIT;
--地区标识(不可直接使用LIKE)
INSERT /*+APPEND*/
INTO PC_CLEAN_CRM_AREA_FLAG_STG_TMP
(
SYS_ID,
CRM_AREA_FLAG
)
SELECT /*+PARALLEL(A,4)*/
A.SYS_ID,
A.CRM_AREA_FLAG CRM_AREA_FLAG
FROM PC_CLEAN_CRM_AREA_FLAG_1_TMP A
WHERE A.CRM_AREA_FLAG IS NOT NULL;
COMMIT;
END IF;
END LOOP;
--地区标识(可直接使用LIKE),其中CITY_NAME与NDC_REF_AREA_FLAG_2互斥
INSERT /*+APPEND*/
INTO PC_CLEAN_CRM_AREA_FLAG_STG_TMP
(
SYS_ID,
CRM_AREA_FLAG
)
SELECT SYS_ID,
CRM_AREA_FLAG
FROM (SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
B.AREA_FLAG CRM_AREA_FLAG ,
ROW_NUMBER()OVER(PARTITION BY A.SYS_ID ORDER BY A.SYS_ID DESC NULLS LAST) RN
FROM PC_UNITE_MANY_FIELD_1_STG_TMP A,
BDL_RULE_REF_AREA_FLAG_1 B
WHERE A.CITY = B.CITY
AND ((B.ID_NUMBER IS NOT NULL AND A.ID_NUMBER LIKE B.ID_NUMBER) OR B.ID_NUMBER IS NULL)
AND ((B.VEHICLE_NO IS NOT NULL AND A.VEHICLE_NO LIKE B.VEHICLE_NO) OR B.VEHICLE_NO IS NULL)
AND ((B.VEHICLE_NO_NOTLIKE IS NOT NULL AND A.VEHICLE_NO NOT LIKE B.VEHICLE_NO_NOTLIKE) OR
B.VEHICLE_NO_NOTLIKE IS NULL)
AND ((B.ADDRESS IS NOT NULL AND A.ADDRESS LIKE B.ADDRESS) OR B.ADDRESS IS NULL)
AND ((B.ADDRESS_NOTLIKE IS NOT NULL AND A.ADDRESS NOT LIKE B.ADDRESS_NOTLIKE) OR
B.ADDRESS_NOTLIKE IS NULL)
AND ((B.TELEPHONE_NUMBER IS NOT NULL AND
(((A.CODE || '-' || A.TEL_NO) LIKE B.TELEPHONE_NUMBER AND A.CODE IS NOT NULL)
OR (A.CODE IS NULL AND A.TEL_NO LIKE B.TELEPHONE_NUMBER))
OR B.TELEPHONE_NUMBER IS NULL)))
WHERE RN = 1;
COMMIT;
-- 更新本次操作日志
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,28,NULL,'02',NULL,NULL,NULL,NULL);
EXCEPTION
WHEN OTHERS THEN
p_errmsg := substr(sqlerrm,1,500);
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,28,NULL,'03',p_errmsg,NULL,NULL,NULL);
RAISE;
END SP_CLEAN_TRANSFORM_AREA_INFO;
/*
部分规则解析
*/
PROCEDURE TRY_FORMAT_SCR_RULES IS
var_idno VARCHAR2(100) := NULL;
var_idno_LIST RangeLikeObjList := NULL;
var_car_no VARCHAR2(100) := NULL;
var_car_no_LIST RangeLikeObjList := NULL;
var_car_no_notlike VARCHAR2(100) := NULL;
var_car_no_notlike_LIST RangeLikeObjList := NULL;
var_address VARCHAR2(100) := NULL;
var_address_LIST RangeLikeObjList := NULL;
var_address_notlike VARCHAR2(100) := NULL;
var_address_notlike_LIST RangeLikeObjList := NULL;
var_tel_no VARCHAR2(100) := NULL;
var_tel_no_LIST RangeLikeObjList := NULL;
begin
FOR i IN list_TAB_SCR_TYPE_PATTERN_D.FIRST .. list_TAB_SCR_TYPE_PATTERN_D.LAST LOOP
--nets_客户身份证件号码
TRY_GET_SCR_RangeLikeObjList(list_TAB_SCR_TYPE_PATTERN_D(i)
.id_number ,
var_idno,
var_idno_LIST);
--nets_车牌号码
TRY_GET_SCR_RangeLikeObjList(list_TAB_SCR_TYPE_PATTERN_D(i)
.vehicle_no ,
var_car_no,
var_car_no_LIST);
--notlike_nets_车牌号码
TRY_GET_SCR_RangeLikeObjList(list_TAB_SCR_TYPE_PATTERN_D(i)
.vehicle_no_notlike ,
var_car_no_notlike,
var_car_no_notlike_LIST);
--nets_联系人地址
TRY_GET_SCR_RangeLikeObjList(list_TAB_SCR_TYPE_PATTERN_D(i)
.address ,
var_address,
var_address_LIST);
--notlike_nets_联系人地址
TRY_GET_SCR_RangeLikeObjList(list_TAB_SCR_TYPE_PATTERN_D(i)
.address_notlike ,
var_address_notlike,
var_address_notlike_LIST);
--电话号码
TRY_GET_SCR_RangeLikeObjList(list_TAB_SCR_TYPE_PATTERN_D(i)
.telephone_number ,
var_tel_no,
var_tel_no_LIST);
INSERT INTO PC_SCR_TYPE_PATTERN_D_TMP
( CITY,
ID_NUMBER,
ID_NUMBER_LIST,
VEHICLE_NO,
VEHICLE_NO_LIST,
VEHICLE_NO_NOTLIKE,
VEHICLE_NO_NOTLIKE_LIST,
ADDRESS,
ADDRESS_LIST,
ADDRESS_NOTLIKE,
ADDRESS_NOTLIKE_LIST,
TELEPHONE_NUMBER,
EXEC_TEL_NO_LIST ,
CRM_AREA)
VALUES
(list_TAB_SCR_TYPE_PATTERN_D(i).city ,
var_idno,
var_idno_LIST,
var_car_no,
var_car_no_LIST,
var_car_no_notlike,
var_car_no_notlike_LIST,
var_address,
var_address_LIST,
var_address_notlike,
var_address_notlike_LIST,
var_tel_no,
var_tel_no_LIST,
list_TAB_SCR_TYPE_PATTERN_D(i).AREA_FLAG);
END LOOP;
end TRY_FORMAT_SCR_RULES;
/*
分解规则
*/
PROCEDURE TRY_GET_SCR_RangeLikeObjList(v_INSTR IN VARCHAR2,
v_OUTSTR OUT VARCHAR2,
v_OUTLIST OUT RangeLikeObjList) IS
aArray RangeLikeObjList := RangeLikeObjList();
i_start integer;
i_end integer;
inx integer;
var_rangestr VARCHAR2(600) := '';
var_torangestr VARCHAR2(1000) := '';
var_tmpstr VARCHAR2(1000) := '';
begin
var_tmpstr := v_INSTR;
inx := 1;
i_start := 0;
i_end := 0;
IF var_tmpstr IS NULL THEN
v_OUTSTR := NULL;
v_OUTLIST := NULL;
RETURN;
ELSE
--存在类似粤J-[012][0129][0129][0012][0012]
LOOP
i_start := INSTR(var_tmpstr, '[');
EXIT WHEN i_start = 0;
i_end := INSTR(var_tmpstr, ']');
var_rangestr := SUBSTR(var_tmpstr,
i_start + 1,
i_end - i_start - 1);
var_torangestr := '';
FOR j IN 1 .. LENGTH(var_rangestr) LOOP
var_torangestr := var_torangestr || '''' ||
SUBSTR(var_rangestr, j, 1) || ''',';
END LOOP;
var_torangestr := SUBSTR(var_torangestr,
1,
LENGTH(var_torangestr) - 1);
var_tmpstr := SUBSTR(var_tmpstr, 1, i_start - 1) || '_' ||
SUBSTR(var_tmpstr, i_end + 1);
aArray.Extend;
aArray(inx) := RangeLikeObj(i_start, var_torangestr);
inx := inx + 1;
END LOOP;
v_OUTSTR := var_tmpstr;
v_OUTLIST := aArray;
END IF;
END;
/*
标识地区
*/
--六个字段如果不是NULL,要AND匹配
function TRY_MATCH_AREA_FLAG(v_IDNO VARCHAR2,
v_CAR_NO VARCHAR2,
v_CAR_NO_NOTLIKE VARCHAR2,
v_ADDRESS VARCHAR2,
v_ADDRESS_NOTLIKE VARCHAR2,
v_TEL_NO VARCHAR2) return varchar2 IS
var_tmpstr VARCHAR2(1000) := '';
str_array NETS_TCIMS_COM_CLEANOUT.type_array;
var_idno VARCHAR2(1) := '0';
var_car_no VARCHAR2(1) := '0';
var_car_no_notlike VARCHAR2(1) := '0';
var_car_no_notlike_STR VARCHAR2(100) := '';
var_address VARCHAR2(1) := '0';
var_address_notlike VARCHAR2(1) := '0';
var_address_notlike_STR VARCHAR2(100) := '';
var_tel_no VARCHAR2(1) := '0';
var_tmp VARCHAR2(100) := '';
aArray RangeLikeObjList := RangeLikeObjList();
begin
FOR i IN list_TAB_TMP_TYPE_PATTERN_D.FIRST .. list_TAB_TMP_TYPE_PATTERN_D.LAST LOOP
var_idno := '0';
var_car_no := '0';
var_car_no_notlike := '0';
var_address := '0';
var_address_notlike := '0';
var_tel_no := '0';
var_car_no_notlike_STR := '';
var_address_notlike_STR := '';
--nets_客户身份证件号码
var_tmpstr := list_TAB_TMP_TYPE_PATTERN_D(i).ID_NUMBER;
IF var_tmpstr IS NULL THEN
var_idno := '1';
ELSE
IF v_IDNO LIKE var_tmpstr THEN
var_idno := '1';
aArray := list_TAB_TMP_TYPE_PATTERN_D(i).ID_NUMBER_LIST;
FOR k IN 1 .. aArray.COUNT LOOP
IF SUBSTR(v_IDNO, aArray(k).id, 1) NOT IN (aArray(k).rangestr) THEN
var_idno := '0';
EXIT;
END IF;
END LOOP;
END IF;
END IF;
--nets_车牌号码
var_tmpstr := list_TAB_TMP_TYPE_PATTERN_D(i).VEHICLE_NO;
aArray.DELETE();
IF var_tmpstr IS NULL THEN
var_car_no := '1';
ELSE
IF v_CAR_NO LIKE var_tmpstr THEN
var_car_no := '1';
aArray := list_TAB_TMP_TYPE_PATTERN_D(i).VEHICLE_NO_LIST;
FOR k IN 1 .. aArray.COUNT LOOP
IF SUBSTR(v_CAR_NO, aArray(k).id, 1) NOT IN
(aArray(k).rangestr) THEN
var_car_no := '0';
EXIT;
END IF;
END LOOP;
END IF;
END IF;
--notlike_nets_车牌号码
var_tmpstr := list_TAB_TMP_TYPE_PATTERN_D(i).VEHICLE_NO_NOTLIKE;
aArray.DELETE();
IF var_tmpstr IS NULL THEN
var_car_no_notlike := '1';
ELSE
IF v_CAR_NO_NOTLIKE LIKE var_tmpstr THEN
var_car_no_notlike := '0';
aArray := list_TAB_TMP_TYPE_PATTERN_D(i)
.VEHICLE_NO_NOTLIKE_LIST;
FOR k IN 1 .. aArray.COUNT LOOP
IF SUBSTR(v_CAR_NO_NOTLIKE, aArray(k).id, 1) IN
(aArray(k).rangestr) THEN
var_car_no_notlike_STR := var_car_no_notlike_STR || '0';
ELSE
var_car_no_notlike_STR := var_car_no_notlike_STR || '1';
END IF;
END LOOP;
ELSE
var_car_no_notlike := '1';
END IF;
END IF;
--nets_联系人地址
var_tmpstr := list_TAB_TMP_TYPE_PATTERN_D(i).ADDRESS;
aArray.DELETE();
IF var_tmpstr IS NULL THEN
var_address := '1';
ELSE
IF v_ADDRESS LIKE var_tmpstr THEN
var_address := '1';
aArray := list_TAB_TMP_TYPE_PATTERN_D(i).ADDRESS_LIST;
FOR k IN 1 .. aArray.COUNT LOOP
IF SUBSTR(v_ADDRESS, aArray(k).id, 1) NOT IN
(aArray(k).rangestr) THEN
var_address := '0';
EXIT;
END IF;
END LOOP;
END IF;
END IF;
--notlike_nets_联系人地址
var_tmpstr := list_TAB_TMP_TYPE_PATTERN_D(i).ADDRESS_NOTLIKE;
aArray.DELETE();
IF var_tmpstr IS NULL THEN
var_address_notlike := '1';
ELSE
IF v_ADDRESS_NOTLIKE LIKE var_tmpstr THEN
var_address_notlike := '0';
aArray := list_TAB_TMP_TYPE_PATTERN_D(i)
.ADDRESS_NOTLIKE_LIST;
FOR k IN 1 .. aArray.COUNT LOOP
IF SUBSTR(v_ADDRESS_NOTLIKE, aArray(k).id, 1) IN
(aArray(k).rangestr) THEN
var_address_notlike_STR := var_address_notlike_STR || '0';
ELSE
var_address_notlike_STR := var_address_notlike_STR || '1';
END IF;
END LOOP;
ELSE
var_address_notlike := '1';
END IF;
END IF;
--电话号码
var_tmpstr := list_TAB_TMP_TYPE_PATTERN_D(i).TELEPHONE_NUMBER;
aArray.DELETE();
IF var_tmpstr IS NULL THEN
var_tel_no := '1';
ELSE
--v_TEL_NO 是由多个电话号码用“,”连接起来的,要拆分匹配
str_array := NETS_TCIMS_COM_CLEANOUT.SPLIT_STR(v_TEL_NO, '/');
IF str_array.count > 0 THEN
aArray := list_TAB_TMP_TYPE_PATTERN_D(i).EXEC_TEL_NO_LIST;
FOR ii in str_array.first .. str_array.last LOOP
IF str_array(ii) IS NOT NULL AND str_array(ii) LIKE var_tmpstr THEN
var_tel_no := '1';
FOR k IN 1 .. aArray.COUNT LOOP
IF SUBSTR(str_array(ii), aArray(k).id, 1) NOT IN
(aArray(k).rangestr) THEN
var_tel_no := '0';
EXIT;
END IF;
END LOOP;
END IF;
IF var_tel_no = '1' THEN
EXIT;
END IF;
END LOOP;
END IF;
END IF;
IF var_idno = '1' AND var_car_no = '1' AND
(var_car_no_notlike = '1' OR
(var_car_no_notlike = '0' AND var_car_no_notlike_STR IS NOT NULL AND
INSTR(var_car_no_notlike_STR, '1') > 0)) AND var_address = '1' AND
(var_address_notlike = '1' OR
(var_address_notlike = '0' AND
var_address_notlike_STR IS NOT NULL AND
INSTR(var_address_notlike_STR, '1') > 0)) AND var_tel_no = '1' THEN
var_tmp := list_TAB_TMP_TYPE_PATTERN_D(i).CRM_AREA;
EXIT;
END IF;
END LOOP;
return(var_tmp);
end TRY_MATCH_AREA_FLAG;
/***********************************************************
--功能说明: 清洗客户姓名_1(外部程序清洗前的操作)
--参数说明:
--调用函数:
--修改记录: create by ex-qiuweisheng001/ex-liujiali001
--*********************************************************/
PROCEDURE SP_CLEAN_CUST_NAME_1
IS
p_id NUMBER; -- 日志记录id
p_errmsg VARCHAR2(500); -- 错误记录
v_spec_chr VARCHAR2(200);
v_spec_chr_length NUMBER(10);
BEGIN
-- 操作记录
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,24,NULL,'01',NULL,NULL,NULL,NULL);
--清空结果临时表
NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_CUST_NAME_3_TMP');
NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_CUST_NAME_4_TMP');
v_spec_chr := NETS_TCIMS_COM_CLEANOUT.V_SPECIAL_CHR_EN||
NETS_TCIMS_COM_CLEANOUT.V_SPECIAL_CHR_ZN||
NETS_TCIMS_COM_CLEANOUT.v_small_letter||
NETS_TCIMS_COM_CLEANOUT.v_capital_letter||
NETS_TCIMS_COM_CLEANOUT.v_figure;
v_spec_chr_length := length(v_spec_chr);
-- 获取姓名列的源数据
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_NAME_1_TMP
(
SYS_ID,
CUST_NAME
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
REPLACE(TRANSLATE(A.CUST_NAME,
CHR(43683) || CHR(63918) || CHR(42235) || CHR(43682) ||
CHR(42107) || CHR(44979) || chr(44789),
' '),
' ',
'') CUST_NAME
FROM IDL_SEP_SRC_DATA A,
IDL_EX_BATCH B
WHERE A.TCIMS_BATCH_ID = B.TCIMS_BATCH_ID
AND B.SERIES_TYPE = '01'
AND B.BATCH_STATUS = '11'
AND B.PREPARE_FLAG = '1';
COMMIT;
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_NAME_6_TMP
(
SYS_ID,
CUST_NAME
)
SELECT /*+PARALLEL(A,4)*/
SYS_ID,
REPLACE(TRANSLATE(REPLACE(REPLACE(TO_SINGLE_BYTE(CUST_NAME),
CHR(13),''),
CHR(10),''),
v_spec_chr,
rpad(' ',v_spec_chr_length,' ')),
' ',
'') CUST_NAME
FROM PC_CLEAN_CUST_NAME_1_TMP A;
COMMIT;
-- 根据"客户姓名前后缀"索引表去掉姓名前后缀
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_NAME_8_TMP
(
SYS_ID,
CUST_NAME
)
SELECT SYS_ID, CUST_NAME
FROM (SELECT SYS_ID,
CUST_NAME,
ROW_NUMBER() OVER(PARTITION BY SYS_ID ORDER BY SYS_ID DESC) RN
FROM (SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID, SUBSTR(A.CUST_NAME, B.LEN + 1) CUST_NAME
FROM PC_CLEAN_CUST_NAME_6_TMP A,
BDL_RULE_REF_NAME_PPFIX B
WHERE B.PPFIX = SUBSTR(A.CUST_NAME, 1, B.LEN)))
WHERE RN = 1;
COMMIT;
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_NAME_9_TMP
(
SYS_ID,
CUST_NAME
)
SELECT /*+PARALLEL(C 2) PARALLEL(D 2)*/
C.SYS_ID,
NVL(D.CUST_NAME, C.CUST_NAME) CUST_NAME
FROM PC_CLEAN_CUST_NAME_6_TMP C,
PC_CLEAN_CUST_NAME_8_TMP D
WHERE C.SYS_ID = D.SYS_ID(+);
COMMIT;
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_NAME_2_TMP
(
SYS_ID,
CUST_NAME
)
SELECT SYS_ID,
CUST_NAME
FROM (SELECT SYS_ID,
CUST_NAME,
ROW_NUMBER() OVER(PARTITION BY SYS_ID ORDER BY SYS_ID DESC) RN
FROM (SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
SUBSTR(A.CUST_NAME, 1, LENGTH(A.CUST_NAME) - B.LEN) CUST_NAME
FROM PC_CLEAN_CUST_NAME_9_TMP A,
BDL_RULE_REF_NAME_PPFIX B
WHERE B.PPFIX = SUBSTR(A.CUST_NAME, -B.LEN)))
WHERE RN = 1;
COMMIT;
--取去掉姓名前后缀的名称 或者没有匹配上的合并
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_NAME_3_TMP
(
SYS_ID,
CUST_NAME
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID, NVL(B.CUST_NAME, A.CUST_NAME) CUST_NAME
FROM PC_CLEAN_CUST_NAME_6_TMP A,
PC_CLEAN_CUST_NAME_2_TMP B
WHERE A.SYS_ID = B.SYS_ID(+);
COMMIT;
-- 更新本次操作日志
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,24,NULL,'02',NULL,NULL,NULL,NULL);
EXCEPTION
WHEN OTHERS THEN
p_errmsg := substr(sqlerrm,1,500);
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,24,NULL,'03',p_errmsg,NULL,NULL,NULL);
RAISE;
END SP_CLEAN_CUST_NAME_1;
/***********************************************************
--功能说明: 清洗客户姓名_2(外部程序清洗后的操作)
--参数说明:
--调用函数:
--修改记录: create by ex-qiuweisheng001/ex-liujiali001
--*********************************************************/
PROCEDURE SP_CLEAN_CUST_NAME_2
IS
p_id NUMBER; -- 日志记录id
p_errmsg VARCHAR2(500); -- 错误记录
BEGIN
-- 操作记录
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,27,NULL,'01',NULL,NULL,NULL,NULL);
--清空结果临时表
NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_CUST_NAME_STG_TMP');
--将"张王李赵"姓氏概率较大的字符开头的,且姓名长度为4的判断为个人
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_NAME_7_TMP
(
SYS_ID,
CUST_NAME,
ORG_FLAG
)
SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
A.SYS_ID,
A.CUST_NAME,
CASE
WHEN B.ORG_FLAG IS NULL AND
SUBSTR(A.CUST_NAME, 1, 1) IN ('张', '王', '李', '赵') AND
LENGTH(A.CUST_NAME) = 4 THEN
'P'
ELSE
B.ORG_FLAG
END ORG_FLAG
FROM PC_CLEAN_CUST_NAME_3_TMP A,
PC_CLEAN_CUST_NAME_4_TMP B
WHERE A.SYS_ID = B.SYS_ID(+);
commit;
-- 长度等于中文字符长度,中文字符长度小于等于4标识为"个人",
-- 同时将长度为1的补上"*",长度大于4标识为"团体"
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_NAME_5_TMP
(
SYS_ID,
CUST_NAME,
ORG_FLAG
)
SELECT /*+PARALLEL(A 4)*/
A.SYS_ID,
CASE
WHEN A.ORG_FLAG IS NULL THEN
CASE
WHEN LENGTH(A.CUST_NAME) * 2 = LENGTHB(A.CUST_NAME) AND
LENGTH(A.CUST_NAME) = 1 THEN
A.CUST_NAME || '*'
ELSE
A.CUST_NAME
END ELSE A.CUST_NAME END CUST_NAME,
CASE
WHEN A.ORG_FLAG IS NULL THEN
CASE
WHEN A.CUST_NAME IS NOT NULL AND LENGTH(A.CUST_NAME) * 2 = LENGTHB(A.CUST_NAME) THEN
CASE
WHEN LENGTH(A.CUST_NAME) <= 4 THEN
'P'
ELSE
'O'
END
ELSE
NULL
END
ELSE
A.ORG_FLAG
END ORG_FLAG
FROM PC_CLEAN_CUST_NAME_7_TMP A;
COMMIT;
-- 将清洗完的数据插入的STG表,并标识清洗状态
INSERT /*+APPEND*/
INTO PC_CLEAN_CUST_NAME_STG_TMP
(
SYS_ID,
CUST_NAME,
ORG_FLAG,
CLEAN_STATUS
)
SELECT /*+PARALLE(A 4)*/
SYS_ID,
CUST_NAME,
ORG_FLAG,
CASE
WHEN ORG_FLAG IS NULL THEN
'0'
ELSE
'1'
END CLEAN_STATUS
FROM PC_CLEAN_CUST_NAME_5_TMP A;
COMMIT;
-- 更新本次操作日志
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,27,NULL,'02',NULL,NULL,NULL,NULL);
EXCEPTION
WHEN OTHERS THEN
p_errmsg := substr(sqlerrm,1,500);
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,27,NULL,'03',p_errmsg,NULL,NULL,NULL);
RAISE;
END SP_CLEAN_CUST_NAME_2;
/***********************************************************
--功能说明: 清洗完成后,更新批次表
--参数说明:
--调用函数:
--修改记录: create by ex-qiuweisheng001/ex-liujiali001
--注意事项: 必须在 产险清洗 返回手工清洗 完毕 后 进行
--*********************************************************/
PROCEDURE SP_UPDATE_BATCH_INFO
IS
p_id NUMBER; -- 日志记录id
p_errmsg VARCHAR2(500); -- 错误记录
BEGIN
-- 操作记录
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,108,NULL,'01',NULL,NULL,NULL,NULL);
--清空结果临时表
--NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_CUST_NAME_STG_TMP');
-- 更新批次状态,及数据信息
UPDATE /*+PARALLE(A 4)*/
IDL_EX_BATCH A
SET A.INVALID_CUST_COUNT = (SELECT count(*)
FROM IDL_SQL_SEP_CUST_RETURN B
WHERE B.TCIMS_BATCH_ID = A.TCIMS_BATCH_ID),
A.VALID_CUST_COUNT = (SELECT A.BATCH_TOTAL_NUM - count(*)
FROM IDL_SQL_SEP_CUST_RETURN B
WHERE B.TCIMS_BATCH_ID = A.TCIMS_BATCH_ID),
A.BATCH_STATUS = '12',
A.UPDATED_DATE = SYSDATE,
A.UPDATED_BY = 'SYSTEM'
WHERE A.BATCH_STATUS = '11'
AND A.SERIES_TYPE = '01'
AND A.PREPARE_FLAG = '1';
COMMIT;
-- 更新本次操作日志
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,108,NULL,'02',NULL,NULL,NULL,NULL);
EXCEPTION
WHEN OTHERS THEN
p_errmsg := substr(sqlerrm,1,500);
NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,108,NULL,'03',p_errmsg,NULL,NULL,NULL);
RAISE;
END SP_UPDATE_BATCH_INFO;
END NETS_TCIMS_PC_TRANSFORM;