读书人

数据清洗三

发布时间: 2012-11-05 09:35:12 作者: rapoo

数据清洗3

CREATE OR REPLACE PACKAGE BODY NETS_TCIMS_PC_CLEANOUT
IS

? /***********************************************************
? --功能说明:? 清洗城市
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --注意事项:? 这个是清洗规则中首当其冲的过程
? --*********************************************************/
? PROCEDURE SP_CLEAN_CITY
? IS
???? p_id???? NUMBER;???????? -- 日志记录id
???? p_errmsg varchar2(500);? -- 错误记录
? BEGIN

??? -- 操作日志记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,2,NULL,'01',NULL,NULL,NULL,NULL);

??? -- truncate 清空?? 表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_CITY_STG_TMP');
???
??? --标识无效数据? 无城市编码即为无效
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_CITY_STG_TMP
?????????? (SYS_ID)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID
?????? FROM IDL_SEP_SRC_DATA A,
??????????? IDL_EX_BATCH???? B
?????? WHERE (A.CITY IS NULL OR A.SECONDARY_ORG IS NULL OR THIRD_ORG IS NULL)
???????? AND A.TCIMS_BATCH_ID = B.TCIMS_BATCH_ID
???????? AND B.SERIES_TYPE = '01'
???????? AND B.BATCH_STATUS = '11'
???????? AND B.PREPARE_FLAG = '1';
??? COMMIT;
???
?? -- 更新本次操作日志
?? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,2,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,2,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_CITY;

? /***********************************************************
? --功能说明:? 清洗车牌号码
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_VEHICLE_NO
? IS
???? p_id???? NUMBER;???????? -- 日志记录id
???? p_errmsg varchar2(500);? -- 错误记录
? BEGIN

??? -- 操作日志记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,22,NULL,'01',NULL,NULL,NULL,NULL);

??? -- truncate 清空? PC_CLEAN_VEHICLE_NO_STG_TMP 表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_VEHICLE_NO_STG_TMP');

??? --去掉特殊符号。回车,头尾的全半角空格、Tab、全角横杠转换为半角横杠,去空格 ,车牌后面的‘.’
??? --全角转换为半角
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_VEHICLE_NO_1_TMP
?????????? (SYS_ID,VEHICLE_NO,CITY)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? REPLACE(TRANSLATE(REPLACE(REPLACE(TO_SINGLE_BYTE(A.VEHICLE_NO),
??????????????????????????????????????????? CHR(13),''),
?????????????????????????????????????? CHR(10),''),
???????????? '-.*'||NETS_TCIMS_COM_CLEANOUT.V_SPECIAL_CHR_EN||NETS_TCIMS_COM_CLEANOUT.V_SPECIAL_CHR_ZN,
???????????? '-????????????????????????????????????? '),
???????????????????? ' ',
???????????????????? '') VEHICLE_NO,
???????????? A.CITY
?????? 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_VEHICLE_NO_2_TMP
?????????? (SYS_ID,VEHICLE_NO,CITY)
????? SELECT /*+PARALLEL(A 4)*/
???????????? SYS_ID,
???????????? CASE
?????????????? WHEN SUBSTR(A.VEHICLE_NO, 1, 2) <>
??????????????????? (SELECT MAX(B.SHORTEN)
?????????????????????? FROM BDL_RULE_PROVINCE_CITY B
????????????????????? WHERE B.CITY = A.CITY) THEN
??????????????? (SELECT MAX(B.SHORTEN)
?????????????????? FROM BDL_RULE_PROVINCE_CITY B
????????????????? WHERE B.CITY = A.CITY) || SUBSTR(A.VEHICLE_NO, 3)
?????????????? ELSE
??????????????? VEHICLE_NO
???????????? END VEHICLE_NO,
???????????? A.CITY
??????? FROM PC_CLEAN_VEHICLE_NO_1_TMP A;
??? COMMIT;

??? -- 补充车牌号码中缺少的 '-' 分隔符
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_VEHICLE_NO_3_TMP
???????? (SYS_ID,VEHICLE_NO,CITY)
????? SELECT /*+PARALLEL(A 4)*/
???????????? SYS_ID,
???????????? CASE
?????????????? WHEN INSTR(VEHICLE_NO, '-') = 0 THEN
??????????????? SUBSTR(VEHICLE_NO, 1, 2) || '-' || SUBSTR(VEHICLE_NO, 3)
?????????????? ELSE
??????????????? VEHICLE_NO
???????????? END VEHICLE_NO,
???????????? CITY
?????? FROM PC_CLEAN_VEHICLE_NO_2_TMP A;
??? COMMIT;

??? -- 将车牌不完整或车牌无内容数据补充“*”,
??? -- 注:车牌不完整定义:长度小于8(补充上“-”时)
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_VEHICLE_NO_4_TMP
?????????? (SYS_ID,VEHICLE_NO,CITY)
????? SELECT /*+PARALLEL(A)*/
???????????? SYS_ID,
???????????? CASE
?????????????? WHEN LENGTH(VEHICLE_NO) < 8 OR VEHICLE_NO IS NULL THEN
??????????????? VEHICLE_NO || '*'
?????????????? ELSE
??????????????? VEHICLE_NO
???????????? END VEHICLE_NO,
???????????? CITY
??????? FROM PC_CLEAN_VEHICLE_NO_3_TMP A;
??? COMMIT;

??? -- 6.车牌以[京,津,冀,晋,蒙,辽,吉,黑,沪,苏,浙,皖,闽,赣,
??? --????????? 云,鲁,豫,鄂,湘,粤,桂,琼,渝,川,黔,滇,藏,陕,甘,青,宁,新][A-Z]-开头,
??? --????????? 长度大于等于8,或含有"*"号车牌为正确车牌,其他需要手工清洗
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_VEHICLE_NO_5_TMP
?????????? (SYS_ID,VEHICLE_NO,CITY,CLEAN_STATUS)
??????? SELECT /*+PARALLEL(A 4)*/
?????????????? SYS_ID,
?????????????? VEHICLE_NO,
?????????????? CITY,
?????????????? CASE
???????????????? WHEN (SUBSTR(A.VEHICLE_NO, 1, 1) IN
????????????????????? ('京', '津', '冀', '晋', '蒙', '辽', '吉', '黑', '沪', '苏', '浙', '皖',
?????????????????????? '闽', '赣', '云', '鲁', '豫', '鄂', '湘', '粤', '桂', '琼', '渝', '川',
?????????????????????? '黔', '滇', '藏', '陕', '甘', '青', '宁', '新')
????????????????????? AND UPPER(SUBSTR(A.VEHICLE_NO, 2, 1)) IN
????????????????????? ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
????????????????????? 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z')
????????????????????? AND SUBSTR(A.VEHICLE_NO, 3, 1) = '-' AND LENGTH(A.VEHICLE_NO) >= 8) OR
????????????????????? INSTR(VEHICLE_NO, '*') > 0 THEN
????????????????????? '1'
???????????????? ELSE
????????????????????? '0'
?????????????? END CLEAN_STATUS
????????? FROM PC_CLEAN_VEHICLE_NO_4_TMP A;
??? COMMIT;


??? --标示车牌号码完整? (为后续比对做准备)
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_VEHICLE_NO_STG_TMP
?????????? (SYS_ID,VEHICLE_NO,CITY,CLEAN_STATUS,VEHICLE_NO_INTEGRITY)
????? SELECT /*+PARALLEL(A 4)*/
???????????? SYS_ID,
???????????? UPPER(VEHICLE_NO),
???????????? CITY,
???????????? CLEAN_STATUS,
???????????? CASE
?????????????? WHEN LENGTH(A.VEHICLE_NO) >= 8 AND SUBSTR(A.VEHICLE_NO, -1) <> '*' THEN
??????????????? '1'
?????????????? ELSE
??????????????? '0'
???????????? END VEHICLE_NO_INTEGRITY
??????? FROM PC_CLEAN_VEHICLE_NO_5_TMP A;
??? COMMIT;

?? -- 更新本次操作日志
?? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,22,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,22,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_VEHICLE_NO;

? /***********************************************************
? --功能说明:? 清洗联系电话,
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --注意事项: 必须在车牌清洗之后运行
? --*********************************************************/
? PROCEDURE SP_CLEAN_TELEPHONE_NO
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录
??? v_sql?????? VARCHAR2(4000);
??? v_sql_split VARCHAR2(4000);

??? CURSOR cur_TEL_SPLIT IS
????? SELECT SP.SPLITFIX FROM BDL_RULE_TEL_SPLIT SP;

? BEGIN
??? -- 操作日志记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,26,NULL,'01',NULL,NULL,NULL,NULL);
???
??? -- truncate 清空? PC_CLEAN_TEL_NO_STG_TMP 表???
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_TEL_NO_STG_TMP');
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_TELEPHONE_STG_TMP');
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_STG_TEL_NO_TMP');????

??? --回车,头尾的全半角空格、Tab、全角横杠转换为半角横杠,
??? --全角转换为半角
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_TEL_NO_1_TMP
???????? (
????????? SYS_ID,
????????? TEL_NO,
????????? TEL_NO_VALID,
????????? CITY,
????????? VEHICLE_NO,
????????? ADDRESS
???????? )
????? SELECT /*+PARALLEL(C 2) PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? CASE
?????????????? WHEN LENGTH(TRIM(A.TELEPHONE_NUMBER)) > 5 THEN
??????????????????? TRIM(REPLACE(REPLACE(TO_SINGLE_BYTE(A.TELEPHONE_NUMBER),
?????????????????????????????????? CHR(13), ''),CHR(10),''))
???????????? END TEL_NO,
???????????? CASE
?????????????? WHEN LENGTH(TRIM(A.TELEPHONE_NUMBER)) > 5 THEN
??????????????????? '1'
?????????????? ELSE
??????????????????? '0'
???????????? END TEL_NO_VALID,
???????????? --B.CITY,
???????????? (select city_name from BDL_COM_DISTRICT_ORG WHERE city_code = C.CITY) CITY,
???????????? A.VEHICLE_NO,
???????????? A.ADDRESS
??????? FROM PC_CLEAN_VEHICLE_NO_STG_TMP C,
???????????? IDL_SEP_SRC_DATA??????????? A,
???????????? IDL_EX_BATCH??????????????? B
???????????? /*(SELECT SYS_ID, VEHICLE_NO, CITY, CLEAN_STATUS, VEHICLE_NO_INTEGRITY
??????????????? FROM PC_CLEAN_VEHICLE_NO_STG_TMP
?????????????? WHERE CLEAN_STATUS = '1') B*/
??????? WHERE A.SYS_ID = C.SYS_ID(+)
????????? AND A.TCIMS_BATCH_ID = B.TCIMS_BATCH_ID
????????? AND B.SERIES_TYPE = '01'
????????? AND B.BATCH_STATUS = '11'
????????? AND B.PREPARE_FLAG = '1';
??? COMMIT;

??? --取分割区号-座机-分机的符号串,'''-'',''x'',''*'',''*'',''呼'',''转'''
??? FOR arow IN cur_TEL_SPLIT LOOP
????? v_sql?????? := v_sql || trim(arow.splitfix);
????? v_sql_split := v_sql_split || '-';
??? END LOOP;

??? --用户定义的区号和分机分隔符转换为"-"
??? IF v_sql IS NOT NULL THEN
????? INSERT /*+APPEND*/
??????? INTO PC_CLEAN_TEL_NO_2_TMP
???????????? (
????????????? SYS_ID,
????????????? TEL_NO,
????????????? TEL_NO_VALID,
????????????? CITY,
????????????? VEHICLE_NO,
????????????? ADDRESS
???????????? )???????
??????? SELECT /*+PARALLEL(A 4)*/
?????????????? SYS_ID,
?????????????? CASE
???????????????? WHEN TEL_NO_VALID = '1' THEN
????????????????? TRANSLATE(TEL_NO, v_sql, v_sql_split)
???????????????? ELSE
????????????????? TEL_NO
?????????????? END TEL_NO,
?????????????? TEL_NO_VALID,
?????????????? CITY,
?????????????? A.VEHICLE_NO,
?????????????? A.ADDRESS
????????? FROM PC_CLEAN_TEL_NO_1_TMP A;
????? COMMIT;
??? ELSE
????? INSERT /*+APPEND*/
??????? INTO PC_CLEAN_TEL_NO_2_TMP
???????????? (
????????????? SYS_ID,
????????????? TEL_NO,
????????????? TEL_NO_VALID,
????????????? CITY,
????????????? VEHICLE_NO,
????????????? ADDRESS
???????????? )
??????? SELECT /*+PARALLEL(A 4)*/
?????????????? A.SYS_ID, A.TEL_NO, A.TEL_NO_VALID, A.CITY,A.VEHICLE_NO,A.ADDRESS
????????? FROM PC_CLEAN_TEL_NO_1_TMP A;
????? COMMIT;
??? END IF;

??? --将空格,非数字替换为斜杠,
??? --4.只保留半角数字和“-”,“/”,其他字符全部删除
??? --将空格,非数字替换为斜杠,同时对电话分列,分隔符为'/' NDC_TMP_TEL_NO_4
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_TEL_NO_NO_USE_TMP
?????????? (clean_tel_result)
????? SELECT /*+PARALLEL(A 4)*/
???????????? NETS_TCIMS_COM_CLEANOUT.CLEAN_TEL(A.SYS_ID, A.TEL_NO, A.CITY,A.VEHICLE_NO,A.ADDRESS)
??????? FROM PC_CLEAN_TEL_NO_2_TMP A
?????? WHERE A.TEL_NO_VALID = '1';
??? COMMIT;

??? -- 识别手机号码
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_TEL_NO_5_TMP
?????????? (SPLIT_SYSID, SYS_ID, TEL_NO)
????? SELECT /*+PARALLEL(A 4)*/
???????????? SPLIT_SYSID,
???????????? SYS_ID,
???????????? LTRIM(REPLACE(TEL_NO, '-', ''),'0') TEL_NO
??????? FROM PC_CLEAN_TEL_NO_4_TMP A
?????? WHERE SUBSTR(A.TEL_NO, 1, 3) IN
???????????? (SELECT PREFIX FROM BDL_RULE_MOBILE_PREFIX);
??? COMMIT;

??? -- 识别座机号码并取区号
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_TEL_NO_6_TMP
?????????? (
??????????? SPLIT_SYSID,
??????????? SYS_ID,
??????????? CODE,
??????????? TEL_NO,
??????????? CITY,
??????????? VEHICLE_NO,
??????????? ADDRESS
?????????? )
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SPLIT_SYSID,
???????????? A.SYS_ID,
???????????? CASE
?????????????? WHEN (INSTR(A.TEL_NO, '-') BETWEEN 3 AND 4) THEN
??????????????? '0'||SUBSTR(A.TEL_NO, 1, INSTR(A.TEL_NO, '-') - 1)
?????????????? ELSE
??????????????? B.CODE
???????????? END CODE,
???????????? CASE
?????????????? WHEN (INSTR(A.TEL_NO, '-') BETWEEN 3 AND 4) THEN
??????????????? SUBSTR(A.TEL_NO, INSTR(A.TEL_NO, '-') + 1)
?????????????? ELSE
??????????????? A.TEL_NO
???????????? END TEL_NO,
???????????? A.CITY,
???????????? A.VEHICLE_NO,
???????????? A.ADDRESS
??????? FROM PC_CLEAN_TEL_NO_4_TMP A,
???????????? BDL_RULE_TEL_CITY_CODE B
?????? WHERE NOT EXISTS (SELECT 1
??????????????? FROM PC_CLEAN_TEL_NO_5_TMP TT
?????????????? WHERE A.SPLIT_SYSID = TT.SPLIT_SYSID)
???????? AND A.CITY = B.CITY_NAME;
??? COMMIT;

??? --转换特殊的 升位区域
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_TEL_NO_3_TMP
?????????? (
??????????? SPLIT_SYSID,
??????????? SYS_ID,
??????????? CODE,
??????????? TEL_NO,
??????????? RISE_AREA
?????????? )
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SPLIT_SYSID,
???????????? A.SYS_ID,
???????????? A.CODE,
???????????? A.TEL_NO,
???????????? NVL(B.RISE_AREA,A.CITY) RISE_AREA
??????? FROM PC_CLEAN_TEL_NO_6_TMP? A,
???????????? (SELECT C.CODE, D.RISE_AREA
??????????????? FROM PC_CLEAN_TEL_NO_6_TMP C,
???????????????????? BDL_RULE_TEL_RISE_AREA D
?????????????? WHERE ((C.VEHICLE_NO LIKE D.VEHICLE_NO AND D.ADDRESS IS NULL)
????????????????? OR (C.ADDRESS LIKE D.ADDRESS AND D.VEHICLE_NO IS NULL)
????????????????? OR (C.ADDRESS LIKE D.ADDRESS AND C.VEHICLE_NO LIKE D.VEHICLE_NO))) B
??????? WHERE A.CODE = B.CODE(+);
??? COMMIT;????????


??? -- 座机号码升位
??? -- 请确保号码升位规则不重叠
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_TEL_NO_7_TMP
?????????? (
??????????? SPLIT_SYSID,
??????????? SYS_ID,
??????????? CODE,
??????????? TEL_NO,
??????????? RISE_AREA
?????????? )
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SPLIT_SYSID,
???????????? A.SYS_ID,
???????????? A.CODE,
???????????? CASE
?????????????? WHEN B.action = 'PRE_INSERT' THEN
??????????????? B.to_pattern || A.TEL_NO
?????????????? WHEN B.action = 'REPLACE' THEN
??????????????? SUBSTR(A.TEL_NO, B.LEFT_START, B.LEFT_LEN) || B.to_pattern ||
??????????????? SUBSTR(A.TEL_NO, B.RIGHT_START)
???????????? END TEL_NO,
???????????? A.RISE_AREA
??????? FROM PC_CLEAN_TEL_NO_3_TMP A,
???????????? BDL_RULE_TEL_CITY_PATTERN B
?????? WHERE ((INSTR(A.TEL_NO, '-') > 0 AND
???????????? SUBSTR(A.TEL_NO, 1, INSTR(A.TEL_NO, '-') - 1) LIKE
???????????? B.OLD_PATTERN) OR
???????????? (INSTR(A.TEL_NO, '-') < 1 AND A.TEL_NO LIKE B.OLD_PATTERN))
???????? AND B.LIKE_MODEL = '1'
???????? AND B.DATA_TYPE = 'PC'
???????? AND A.RISE_AREA = B.CITY_NAME;
??? COMMIT;

??? /*
??? 8******->81******
??? *******->8*******
??? 除去LIKE_MODEL='1'的升位
??? */
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_TEL_NO_7_TMP
?????????? (
??????????? SPLIT_SYSID,
??????????? SYS_ID,
??????????? CODE,
??????????? TEL_NO,
??????????? RISE_AREA
?????????? )
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SPLIT_SYSID,
???????????? A.SYS_ID,
???????????? A.CODE,
???????????? CASE
?????????????? WHEN B.action = 'PRE_INSERT' THEN
??????????????? B.to_pattern || A.TEL_NO
?????????????? WHEN B.action = 'REPLACE' THEN
??????????????? SUBSTR(A.TEL_NO, B.LEFT_START, B.LEFT_LEN) || B.to_pattern ||
??????????????? SUBSTR(A.TEL_NO, B.RIGHT_START)
???????????? END TEL_NO,
???????????? A.RISE_AREA
??????? FROM PC_CLEAN_TEL_NO_3_TMP???????? A,
???????????? BDL_RULE_TEL_CITY_PATTERN???? B
?????? WHERE ((INSTR(A.TEL_NO, '-') > 0 AND
???????????? SUBSTR(A.TEL_NO, 1, INSTR(A.TEL_NO, '-') - 1) LIKE
???????????? B.OLD_PATTERN) OR
???????????? (INSTR(A.TEL_NO, '-') < 1 AND A.TEL_NO LIKE B.OLD_PATTERN))
???????? AND NOT EXISTS(SELECT 1 FROM LA_CLEAN_TEL_NO_7_TMP C
???????????????????????? WHERE C.SPLIT_SYSID = A.SPLIT_SYSID)
???????? AND B.LIKE_MODEL = '2'
???????? AND B.DATA_TYPE = 'PC'
???????? AND A.RISE_AREA = B.CITY_NAME;
??? COMMIT;

??? /*******************************************
??? 处理 第三种模式 升位:
????? 例如: 广东省 “湛江 ”
??? 前提: 除去 LIKE_MODEL = '1' 和 '2' 的升位
??? ********************************************/
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_TEL_NO_7_TMP
?????????? (
??????????? SPLIT_SYSID,
??????????? SYS_ID,
??????????? CODE,
??????????? TEL_NO,
??????????? RISE_AREA
?????????? )
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SPLIT_SYSID,
???????????? A.SYS_ID,
???????????? A.CODE,
???????????? CASE
?????????????? WHEN B.action = 'PRE_INSERT' THEN
????????????????? SUBSTR(A.TEL_NO, B.LEFT_START, B.LEFT_LEN) || A.TEL_NO
?????????????? WHEN B.action = 'REPLACE' THEN
??????????????? B.to_pattern || SUBSTR(A.TEL_NO, B.LEFT_START, B.LEFT_LEN) || A.TEL_NO
?????????????? END TEL_NO,
???????????? A.RISE_AREA
??????? FROM PC_CLEAN_TEL_NO_3_TMP???????? A,
???????????? BDL_RULE_TEL_CITY_PATTERN???? B
?????? WHERE ((INSTR(A.TEL_NO, '-') > 0 AND
???????????? SUBSTR(A.TEL_NO, 1, INSTR(A.TEL_NO, '-') - 1) LIKE
???????????? B.OLD_PATTERN) OR
???????????? (INSTR(A.TEL_NO, '-') < 1 AND A.TEL_NO LIKE B.OLD_PATTERN))
???????? AND NOT EXISTS(SELECT 1 FROM LA_CLEAN_TEL_NO_7_TMP C
???????????????????????? WHERE C.SPLIT_SYSID = A.SPLIT_SYSID)
???????? AND B.LIKE_MODEL = '3'
???????? AND B.DATA_TYPE = 'PC'
???????? AND A.RISE_AREA = B.CITY_NAME;
??? COMMIT;

??? /*******************************************
??? 处理 第四种模式 升位:
????? 例如: 特例模式 “泉州 ”
??? 前提: 除去 LIKE_MODEL = '1' 、 '2' 和 ‘3’的升位
??? ********************************************/
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_TEL_NO_7_TMP
?????????? (
??????????? SPLIT_SYSID,
??????????? SYS_ID,
??????????? CODE,
??????????? TEL_NO,
??????????? RISE_AREA
?????????? )
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SPLIT_SYSID,
???????????? A.SYS_ID,
???????????? A.CODE,
???????????? CASE
?????????????? WHEN B.action = 'PRE_INSERT' THEN
??????????????? B.to_pattern || A.TEL_NO
?????????????? WHEN B.action = 'REPLACE' THEN
??????????????? B.to_pattern || SUBSTR(A.TEL_NO, B.LEFT_START, B.LEFT_LEN) || B.MIDDLE_INSERT || SUBSTR(A.TEL_NO, B.RIGHT_START)
???????????? END TEL_NO,
???????????? A.RISE_AREA
??????? FROM PC_CLEAN_TEL_NO_3_TMP???????? A,
???????????? BDL_RULE_TEL_CITY_PATTERN???? B
?????? WHERE ((INSTR(A.TEL_NO, '-') > 0 AND
???????????? SUBSTR(A.TEL_NO, 1, INSTR(A.TEL_NO, '-') - 1) LIKE
???????????? B.OLD_PATTERN) OR
???????????? (INSTR(A.TEL_NO, '-') < 1 AND A.TEL_NO LIKE B.OLD_PATTERN))
???????? AND NOT EXISTS(SELECT 1 FROM LA_CLEAN_TEL_NO_7_TMP C
???????????????????????? WHERE C.SPLIT_SYSID = A.SPLIT_SYSID)
???????? AND B.LIKE_MODEL = '4'
???????? AND B.DATA_TYPE = 'PC'
???????? AND A.RISE_AREA = B.CITY_NAME;
??? COMMIT;

??? --同时把正确的号码放入
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_TEL_NO_7_TMP
?????????? (
??????????? SPLIT_SYSID,
??????????? SYS_ID,
??????????? CODE,
??????????? TEL_NO,
??????????? RISE_AREA
?????????? )
????? SELECT /*+PARALLEL(A 2) PARALLEL(C 2)*/
???????????? A.SPLIT_SYSID, A.SYS_ID, A.CODE, A.TEL_NO, A.RISE_AREA
??????? FROM PC_CLEAN_TEL_NO_3_TMP A,
???????????? BDL_RULE_TEL_CITY_CODE C
?????? WHERE ((INSTR(A.TEL_NO, '-') > 0 AND
???????????? LENGTH(SUBSTR(A.TEL_NO, 1, INSTR(A.TEL_NO, '-') - 1)) =
???????????? C.VALID_LEGTH) OR (INSTR(A.TEL_NO, '-') < 1 AND
???????????? LENGTH(A.TEL_NO) = C.VALID_LEGTH))
???????? AND NOT EXISTS(SELECT 1 FROM LA_CLEAN_TEL_NO_7_TMP B
???????????????????????? WHERE B.SPLIT_SYSID = A.SPLIT_SYSID)
???????? AND A.RISE_AREA = C.CITY_NAME
???????? AND C.DATA_TYPE = 'PC';
??? COMMIT;


??? -- 电话号码清洗结果??? 将清洗完的数据插入的STG表,并标识清洗状态
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_TEL_NO_8_TMP
?????????? (
??????????? SPLIT_SYSID,
??????????? SYS_ID,
??????????? CODE,
??????????? TEL_NO,
??????????? CITY,
??????????? CLEAN_STATUS
?????????? )
???? SELECT /*+PARALLEL(t1 2) PARALLEL(t5 2) PARALLEL(tt 2)*/
??????????? NVL2(tt.CODE,TT.SPLIT_SYSID,T5.SPLIT_SYSID) SPLIT_SYSID,
??????????? t1.SYS_ID SYS_ID,
??????????? tt.CODE?? CODE,
??????????? nvl(nvl(tt.TEL_NO,t5.TEL_NO),t1.TEL_NO) TEL_NO,
??????????? t1.CITY?? CITY,
??????????? nvl(nvl2(tt.code,tt.CLEAN_STATUS,t5.CLEAN_STATUS),0) CLEAN_STATUS
?????? FROM PC_CLEAN_TEL_NO_1_TMP t1,
??????????? (SELECT SPLIT_SYSID,
??????????????????? SYS_ID,
??????????????????? TEL_NO,
??????????????????? DECODE(LENGTH(TEL_NO), 11, '1', '0') CLEAN_STATUS
?????????????? FROM PC_CLEAN_TEL_NO_5_TMP) t5,
??????????? (SELECT TL.SPLIT_SYSID,
??????????????????? TL.SYS_ID,
??????????????????? DECODE(NVL(T7.SPLIT_SYSID, 0),
??????????????????????????????????? 0,
??????????????????????????????????? TL.CODE,
??????????????????????????????????? T7.CODE) CODE,
??????????????????? DECODE(NVL(T7.SPLIT_SYSID, 0),
??????????????????????????????????? 0,
??????????????????????????????????? TL.TEL_NO,
??????????????????????????????????? T7.TEL_NO) TEL_NO,
?????????????????? DECODE(NVL(T7.SPLIT_SYSID, 0), 0, '0', '1') CLEAN_STATUS
?????????????? FROM PC_CLEAN_TEL_NO_3_TMP TL, PC_CLEAN_TEL_NO_7_TMP T7
????????????? WHERE TL.SPLIT_SYSID = T7.SPLIT_SYSID(+)) tt
?????? WHERE t1.sys_id = t5.sys_id(+)
???????? AND t1.sys_id = tt.sys_id(+);
??? COMMIT;

??? -- 电话号码清洗结果??? 将清洗完的数据插入的STG表,并标识清洗状态
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_TEL_NO_STG_TMP
?????????? (
??????????? SPLIT_SYSID,
??????????? SYS_ID,
??????????? CODE,
??????????? TEL_NO,
??????????? CITY,
??????????? CLEAN_STATUS
?????????? )
????? SELECT SPLIT_SYSID,
???????????? SYS_ID,
???????????? CODE,
???????????? TEL_NO,
???????????? CITY,
???????????? CLEAN_STATUS
??????? FROM (SELECT /*+PARALLEL(A 4)*/
???????????????????? A.SPLIT_SYSID,
???????????????????? A.SYS_ID,
???????????????????? A.CODE,
???????????????????? A.TEL_NO,
???????????????????? A.CITY,
???????????????????? A.CLEAN_STATUS,
???????????????????? ROW_NUMBER() OVER(PARTITION BY A.SYS_ID,A.CODE||A.TEL_NO ORDER BY A.SYS_ID) RN_NO
??????????????? FROM PC_CLEAN_TEL_NO_8_TMP A)
??????? WHERE RN_NO = 1;
??? COMMIT;
???
??? -- 合并电话号码
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_TELEPHONE_STG_TMP
?????????? (
??????????? SYS_ID,
??????????? TEL_NO,
??????????? CITY,
??????????? CLEAN_STATUS
?????????? )
??? SELECT SYS_ID,
?????????? substr(LTRIM(MAX(SYS_CONNECT_BY_PATH(TEL_NO, ',')), ','),1,1000) TEL_NO,
?????????? CITY,
?????????? '1' CLEAN_STATUS
???? FROM (SELECT /*+PARALLEL(A 4)*/
????????????????? A.SYS_ID,
????????????????? NVL2(A.CODE,A.CODE||'-','') || A.TEL_NO TEL_NO,
????????????????? A.CITY,
????????????????? A.CLEAN_STATUS,
????????????????? ROW_NUMBER() OVER(PARTITION BY A.SYS_ID ORDER BY NVL2(A.CODE,A.CODE||'-','') || A.TEL_NO) RN_BY_ID,
????????????????? ROW_NUMBER() OVER(ORDER BY A.SYS_ID, NVL2(A.CODE,A.CODE||'-','') || A.TEL_NO) + TO_NUMBER(A.SYS_ID) RN
???????????? FROM PC_CLEAN_TEL_NO_STG_TMP A
??????????? WHERE A.CLEAN_STATUS = '1')
???? START WITH RN_BY_ID = 1
??? CONNECT BY RN - 1 = PRIOR RN
???? GROUP BY SYS_ID,CITY ORDER BY SYS_ID;??????
??? COMMIT;
???
??? -- 增加一个 代理电话标识? STG 表
??? INSERT /*+APPEND*/
????? INTO PC_STG_TEL_NO_TMP
?????????? (
??????????? SPLIT_SYSID,
??????????? SYS_ID,
??????????? CODE,
??????????? TEL_NO,
??????????? CITY,
??????????? IS_PROXY_PHONE_FLAG,
??????????? TELEPHONE_TYPE
?????????? )
??? SELECT A.SPLIT_SYSID,
?????????? A.SYS_ID,
?????????? A.CODE,
?????????? A.TEL_NO,
?????????? A.CITY,
?????????? CASE
???????????? WHEN RN >= 4 THEN
????????????????? 'Y'
???????????? ELSE
????????????????? 'N'
?????????? END IS_PROXY_PHONE_FLAG,
?????????? NVL2(A.CODE,'02','01') TELEPHONE_TYPE??????????
????? FROM (SELECT /*+PARALLEL(B 4)*/
?????????????????? B.SPLIT_SYSID,
?????????????????? B.SYS_ID,
?????????????????? B.CODE,
?????????????????? B.TEL_NO,
?????????????????? B.CITY,
?????????????????? ROW_NUMBER()OVER(PARTITION BY B.CODE,B.TEL_NO ORDER BY B.SYS_ID ASC) RN
???????? FROM PC_CLEAN_TEL_NO_STG_TMP B
??????? WHERE B.CLEAN_STATUS = '1') A;
??? COMMIT;
?
?/*??
??? -- 后续需要通过 判断 sys_id 下的所有电话号码重复, 记录标识为“代理电话重复数据”
?????? 需要和 更新比对确认
??? -- 2009年11月23日 确认? 这项功能 在入 BDL 层时更新?
?*/
?
??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,26,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,26,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_TELEPHONE_NO;

? /***********************************************************
? --功能说明:? 清洗号牌种类
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_BRAND_TYPE
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录

? BEGIN

??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,3,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_BRAND_TYPE_CD_STG_TMP');
???
??? -- 去回车,头尾的全半角空格、Tab
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_BRAND_TYPE_1_TMP
?????????? (SYS_ID,BRAND_TYPE,BRAND_TYPE_CODE)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? NVL(TRIM(REPLACE(REPLACE(TO_SINGLE_BYTE(A.BRAND_TYPE),CHR(13),''),
???????????????????????? CHR(10),'')),'小型汽车') BRAND_TYPE,
???????????? TRIM(REPLACE(REPLACE(TO_SINGLE_BYTE(A.BRAND_TYPE_CODE),CHR(13),''),
??????????????????? CHR(10),'')) BRAND_TYPE_CODE
?????? FROM IDL_SEP_SRC_DATA A,
??????????? IDL_EX_BATCH???? B
????? WHERE (BRAND_TYPE IS NOT NULL
???????? OR BRAND_TYPE_CODE IS NOT NULL)
???????? AND 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_BRAND_TYPE_2_TMP
?????????? (SYS_ID,BRAND_TYPE,BRAND_TYPE_CODE)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? A.BRAND_TYPE,
???????????? CASE
?????????????? WHEN A.BRAND_TYPE_CODE IN
??????????????????? (SELECT BRAND_TYPE_CODE FROM BDL_RULE_REF_BRAND_TYPE) THEN
??????????????????? A.BRAND_TYPE_CODE
?????????????? ELSE
??????????????????? B.BRAND_TYPE_CODE
???????????? END BRAND_TYPE_CODE
?????? FROM PC_CLEAN_BRAND_TYPE_1_TMP A,
??????????? (SELECT DISTINCT BRAND_TYPE, BRAND_TYPE_CODE
????????????? FROM BDL_RULE_REF_BRAND_TYPE)?? B
????? WHERE A.BRAND_TYPE = B.BRAND_TYPE(+);
??? COMMIT;

??? -- 辨别 是否需要手工清洗
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_BRAND_TYPE_CD_STG_TMP
?????????? (SYS_ID,BRAND_TYPE_CODE,CLEAN_STATUS)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? B.BRAND_TYPE_CODE,
???????????? CASE
???????????????? WHEN B.BRAND_TYPE_CODE IS NULL --AND B.BRAND_TYPE IS NULL
????????????????????? THEN
????????????????????? '0'
???????????????? ELSE
????????????????????? '1'
???????????? END CLEAN_STATUS
?????? FROM PC_CLEAN_BRAND_TYPE_2_TMP A,
??????????? BDL_RULE_REF_BRAND_TYPE?? B
????? WHERE A.BRAND_TYPE_CODE = B.BRAND_TYPE_CODE(+);
??? COMMIT;
???????
??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,3,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,3,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_BRAND_TYPE;

? /***********************************************************
? --功能说明:? 清洗使用性质及代码
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_USAGE_ATTRIBUTE
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录
? BEGIN

??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,4,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_USAGE_CODE_STG_TMP');

??? --去回车,头尾的全半角空格、Tab、全角横杠、半角横杠
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_USAGE_ATTRIBUTE_1_TMP
???????? (SYS_ID,USAGE_ATTRIBUTE,USAGE_CODE)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? NVL(trim(REPLACE(REPLACE(TO_SINGLE_BYTE(A.USAGE_ATTRIBUTE), CHR(13), ''),
??????????????????? CHR(10),'')),'非营运') USAGE_ATTRIBUTE,
???????????? trim(REPLACE(REPLACE(TO_SINGLE_BYTE(A.USAGE_CODE), CHR(13), ''),
??????????????????? CHR(10),''))USAGE_CODE
??????? 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_USAGE_ATTRIBUTE_2_TMP
?????????? (SYS_ID,USAGE_ATTRIBUTE,USAGE_CODE)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? B.USAGE_ATTRIBUTE,
???????????? CASE
?????????????? WHEN A.USAGE_CODE IN
?????????????????? (SELECT USAGE_CODE FROM BDL_RULE_USAGE_ATTRIBUTE) THEN
??????????????????? A.USAGE_CODE
?????????????? ELSE
??????????????????? B.USAGE_CODE
????????????? END USAGE_CODE
??????? FROM PC_CLEAN_USAGE_ATTRIBUTE_1_TMP A,
???????????? BDL_RULE_USAGE_ATTRIBUTE?????? B
??????? WHERE A.USAGE_ATTRIBUTE = B.USAGE_ATTRIBUTE(+);
??? COMMIT;

??? -- 不在使用性质代码表中且该字段不为空的数据定义为需手工清洗数据
??? -- 将符合标准的记录标识为清洗完成
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_USAGE_CODE_STG_TMP
?????????? (SYS_ID,USAGE_CODE,USAGE_ATTRIBUTE,CLEAN_STATUS)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? B.USAGE_CODE,
???????????? B.USAGE_ATTRIBUTE,
???????????? CASE
?????????????? WHEN B.USAGE_CODE IS NULL THEN
??????????????????? '0'
?????????????? ELSE
??????????????????? '1'
???????????? END CLEAN_STATUS
??????? FROM PC_CLEAN_USAGE_ATTRIBUTE_2_TMP A,
???????????? BDL_RULE_USAGE_ATTRIBUTE?????? B
??????? WHERE A.USAGE_CODE = B.USAGE_CODE(+);
??? COMMIT;

??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,4,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,4,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_USAGE_ATTRIBUTE;

? /***********************************************************
? --功能说明:? 清洗发动机号
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_ENGINE_NO
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录

??? v_str?????? VARCHAR2(100) := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
???
? BEGIN

??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,6,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_ENGINE_NO_STG_TMP');

??? --去掉特殊符号。回车,头尾的全半角空格、Tab、全角横杠转换为半角横杠,去空格
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_ENGINE_NO_STG_TMP
???????? (SYS_ID,ENGINE_NUMBER)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? TRANSLATE(
??????????????? REPLACE(UPPER(REPLACE(REPLACE(TO_SINGLE_BYTE(A.ENGINE_NUMBER), CHR(13), ''),
?????????????????????????????????? CHR(10), '')),'E+',''),
??????????????? v_str||REPLACE(UPPER(REPLACE(REPLACE(TO_SINGLE_BYTE(A.ENGINE_NUMBER), CHR(13), ''),CHR(10), '')),'E+',''),
??????????????? v_str
??????????????? ) ENGINE_NUMBER
??????? 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;

??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,6,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,6,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_ENGINE_NO;

? /***********************************************************
? --功能说明:? 清洗车架号
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_VEHICLE_FRAME_NO
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录

??? v_str?????? VARCHAR2(100) := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
???
? BEGIN

??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,7,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_VEHICLE_FRAME_STG_TMP');

??? --去掉特殊符号。回车,头尾的全半角空格、Tab、全角横杠转换为半角横杠,去空格
??? --只包含数据和字母,非数字和字母字符全部删除
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_VEHICLE_FRAME_STG_TMP
?????????? (SYS_ID,VEHICLE_FRAME)
??? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
?????????? A.SYS_ID,
?????????? TRANSLATE(
???????????? REPLACE(UPPER(REPLACE(REPLACE(TO_SINGLE_BYTE(A.VEHICLE_FRAME), CHR(13), ''),CHR(10), '')), 'E+', ''),
???????????? v_str || REPLACE(UPPER(REPLACE(REPLACE(TO_SINGLE_BYTE(A.VEHICLE_FRAME), CHR(13), ''),CHR(10), '')), 'E+', ''),
???????????? v_str) VEHICLE_FRAME
???? 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;

??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,7,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,7,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_VEHICLE_FRAME_NO;

? /***********************************************************
? --功能说明:? 清洗车辆种类
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_VEHICLE_TYPE
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录

? BEGIN

??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,5,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_VEHIC_TYPE_CD_STG_TMP');

??? --去回车,头尾的全半角空格、Tab
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_VEHICLE_TYPE_1_TMP
?????????? (SYS_ID,VEHICLE_TYPE,VEHICLE_TYPE_CODE)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? REPLACE(REPLACE(TO_SINGLE_BYTE(A.VEHICLE_TYPE), CHR(13), ''),
????????????????? CHR(10), '') VEHICLE_TYPE,
???????????? REPLACE(REPLACE(TO_SINGLE_BYTE(A.VEHICLE_TYPE_CODE), CHR(13), ''),
????????????????? CHR(10), '') VEHICLE_TYPE_CODE
?????? FROM IDL_SEP_SRC_DATA A,
??????????? IDL_EX_BATCH???? B
?????? WHERE (A.VEHICLE_TYPE IS NOT NULL
???????? OR A.VEHICLE_TYPE_CODE IS NOT NULL)
???????? AND 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_VEHICLE_TYPE_2_TMP
?????????? (SYS_ID,VEHICLE_TYPE,VEHICLE_TYPE_CODE)
??? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
?????????? A.SYS_ID,
?????????? B.VEHICLE_TYPE,
?????????? CASE
???????????? WHEN A.VEHICLE_TYPE_CODE IN
????????????????? (SELECT VEHICLE_TYPE_CODE FROM BDL_RULE_VEHICLE_TYPE) THEN
????????????????? A.VEHICLE_TYPE_CODE
???????????? ELSE
????????????????? B.VEHICLE_TYPE_CODE
???????????? END VEHICLE_TYPE_CODE
?????? FROM PC_CLEAN_VEHICLE_TYPE_1_TMP A,
??????????? BDL_RULE_VEHICLE_TYPE?????? B
?????? WHERE A.VEHICLE_TYPE = B.VEHICLE_TYPE(+) ;
???? COMMIT;


??? -- 不在使用性质代码表中且该字段不为空的数据定义为需手工清洗数据
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_VEHIC_TYPE_CD_STG_TMP
?????????? (SYS_ID,VEHICLE_TYPE_CODE,VEHICLE_TYPE,CLEAN_STATUS )
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? B.VEHICLE_TYPE_CODE,
???????????? B.VEHICLE_TYPE,
???????????? CASE
???????????????? WHEN B.VEHICLE_TYPE_CODE IS NULL AND B.VEHICLE_TYPE IS NULL THEN
????????????????????? '0'
???????????????? ELSE
????????????????????? '1'
???????????? END CLEAN_STATUS
??????? FROM PC_CLEAN_VEHICLE_TYPE_2_TMP A,
???????????? BDL_RULE_VEHICLE_TYPE?????? B
?????? WHERE A.VEHICLE_TYPE_CODE = B.VEHICLE_TYPE_CODE(+) ;
??? COMMIT;

??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,5,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,5,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_VEHICLE_TYPE;

? /***********************************************************
? --功能说明:? 清洗称谓
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_SALUTATION
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录
? BEGIN

??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,8,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_SALUTATION_STG_TMP');

??? --去回车,头尾的全半角空格、Tab
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_SALUTATION_1_TMP
?????????? (SYS_ID,SALUTATION)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? TRIM(REPLACE(REPLACE(TO_SINGLE_BYTE(A.SALUTATION), CHR(13), '')
???????????????? , CHR(10), '')) SALUTATION
?????? 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_SALUTATION_STG_TMP
?????????? (SYS_ID,SALUTATION)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? NVL(B.NEW_SALUTATION,A.SALUTATION) SALUTATION
?????? FROM PC_CLEAN_SALUTATION_1_TMP A,
??????????? BDL_RULE_SALUTATION B
????? WHERE A.SALUTATION = B.OLD_SALUTATION(+);
??? COMMIT;

??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,8,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,8,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_SALUTATION;

? /***********************************************************
? --功能说明:? 清洗客户性别
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --注意事项:? 整合数据时,用 身份证 转换过来的数据 替换(空值除外)
? --*********************************************************/
? PROCEDURE SP_CLEAN_SEX
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录
? BEGIN

??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,9,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_SEX_STG_TMP');

??? --去回车,头尾的全半角空格、Tab
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_SEX_1_TMP
?????????? (SYS_ID,SEX)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? TRIM(REPLACE(REPLACE(TO_SINGLE_BYTE(A.SEX), CHR(13), ''),chr(10),'')) SEX
?????? 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_SEX_STG_TMP
?????????? (SYS_ID,SEX)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? NVL(B.NEW_SEX,A.SEX) SEX
?????? FROM PC_CLEAN_SEX_1_TMP A,
??????????? BDL_RULE_SEX?????? B
?????? WHERE A.SEX = B.OLD_SEX(+);
??? COMMIT;

??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,9,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,9,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_SEX;

? /***********************************************************
? --功能说明:? 清洗主驾人性别
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_MAIN_DRIVER_SEX
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录
? BEGIN

??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,10,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_DRIVER_SEX_STG_TMP');

??? --去回车,头尾的全半角空格、Tab
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_DRIVER_SEX_1_TMP
?????????? (SYS_ID,MAIN_DRIVER_SEX)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? TRIM(REPLACE(REPLACE(TO_SINGLE_BYTE(A.MAIN_DRIVER_SEX), CHR(13), ''),chr(10),'')) MAIN_DRIVER_SEX
?????? 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_DRIVER_SEX_STG_TMP
?????????? (SYS_ID,MAIN_DRIVER_SEX)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? NVL(B.NEW_SEX,A.MAIN_DRIVER_SEX) MAIN_DRIVER_SEX
?????? FROM PC_CLEAN_DRIVER_SEX_1_TMP A,
??????????? BDL_RULE_SEX????????????? B
?????? WHERE A.MAIN_DRIVER_SEX = B.OLD_SEX(+);
??? COMMIT;

??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,10,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,10,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_MAIN_DRIVER_SEX;


? /***********************************************************
? --功能说明:? 清洗 吨位\核定座位数\车辆价值\排气量
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_TON_SEAT_VALU_EXHAUST
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录
? BEGIN

??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,11,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_SOME_NUMBER_STG_TMP');

??? --去回车,头尾的全半角空格、Tab
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_SOME_NUMBER_1_TMP
?????????? (SYS_ID,TON_NUMBER,SEAT_NUMBER,VEHICLE_VALUE,EXHAUST)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? translate(TRIM(REPLACE(TO_SINGLE_BYTE(A.TON_NUMBER), CHR(13), '')),
??????????????? '0123456789.'||TRIM(REPLACE(TO_SINGLE_BYTE(A.TON_NUMBER), CHR(13), '')),
??????????????? '0123456789.'
???????????? ) TON_NUMBER,
???????????? translate(TRIM(REPLACE(TO_SINGLE_BYTE(A.SEAT_NUMBER), CHR(13), '')),
??????????????? '0123456789.'||TRIM(REPLACE(TO_SINGLE_BYTE(A.SEAT_NUMBER), CHR(13), '')),
??????????????? '0123456789.'
???????????? ) SEAT_NUMBER,
???????????? translate(TRIM(REPLACE(TO_SINGLE_BYTE(A.VEHICLE_VALUE), CHR(13), '')),
??????????????? '0123456789.'||TRIM(REPLACE(TO_SINGLE_BYTE(A.VEHICLE_VALUE), CHR(13), '')),
??????????????? '0123456789.'
???????????? ) VEHICLE_VALUE,
???????????? translate(TRIM(REPLACE(TO_SINGLE_BYTE(A.EXHAUST), CHR(13), '')),
??????????????? '0123456789.'||TRIM(REPLACE(TO_SINGLE_BYTE(A.EXHAUST), CHR(13), '')),
??????????????? '0123456789.'
???????????? ) EXHAUST
?????? 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_SOME_NUMBER_STG_TMP
?????????? (SYS_ID,TON_NUMBER,SEAT_NUMBER,VEHICLE_VALUE,EXHAUST)
????? SELECT /*+PARALLEL(A 4)*/
???????????? A.SYS_ID,
???????????? TO_NUMBER(A.TON_NUMBER) TON_NUMBER,
???????????? CASE
?????????????? WHEN TO_NUMBER(SEAT_NUMBER) < 999 THEN
??????????????????? TO_NUMBER(SEAT_NUMBER)
?????????????? ELSE
??????????????????? NULL
???????????? END SEAT_NUMBER,
???????????? TO_NUMBER(A.VEHICLE_VALUE) VEHICLE_VALUE,
???????????? TO_NUMBER(A.EXHAUST)?????? EXHAUST
?????? FROM PC_CLEAN_SOME_NUMBER_1_TMP A;
??? COMMIT;

??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,11,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,11,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_TON_SEAT_VALU_EXHAUST;

? /***********************************************************
? --功能说明:? 清洗 车身颜色
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_VEHICLE_BODY_COLOR
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录
? BEGIN
??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,12,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_CAR_COLOR_STG_TMP');

??? --去回车,头尾的全半角空格、Tab
??? INSERT /*+APPEND*/
????? INTO PC_CLEAN_CAR_COLOR_STG_TMP
?????????? (SYS_ID,VEHICLE_BODY_COLOR)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? TRIM(REPLACE(REPLACE(TO_SINGLE_BYTE(A.VEHICLE_BODY_COLOR), CHR(13), '')
????????????????? , CHR(10), '')) VEHICLE_BODY_COLOR
??????? 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;

??? -- 更新本次操作日志
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,12,NULL,'02',NULL,NULL,NULL,NULL);

? EXCEPTION
???? WHEN OTHERS THEN
??????? p_errmsg := substr(sqlerrm,1,500);
??????? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,12,NULL,'03',p_errmsg,NULL,NULL,NULL);
??????? RAISE;
? END SP_CLEAN_VEHICLE_BODY_COLOR;

? /***********************************************************
? --功能说明:? 清洗 身份证件号码
? --参数说明:
? --调用函数:
? --修改记录:? create by ex-qiuweisheng001/ex-liujiali001
? --*********************************************************/
? PROCEDURE SP_CLEAN_ID_NUMBER
? IS
??? p_id??????? NUMBER;???????? -- 日志记录id
??? p_errmsg??? VARCHAR2(500);? -- 错误记录
? BEGIN
??? -- 操作记录
??? NETS_TCIMS_COMM.SP_LOG_RECORDER(p_id,21,NULL,'01',NULL,NULL,NULL,NULL);

??? --清空结果临时表
??? NETS_TCIMS_COMM.SP_TRUNCATE('TCIMSLOGTMP','PC_CLEAN_ID_NUMBER_STG_TMP');

??? --去掉特殊符号。? 全角转换为半角
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_ID_NUMBER_1_TMP
???????? (SYS_ID,ID_NUMBER)
????? SELECT /*+PARALLEL(A 2) PARALLEL(B 2)*/
???????????? A.SYS_ID,
???????????? CASE
?????????????? WHEN SUBSTR(TO_SINGLE_BYTE(TRIM(A.ID_NUMBER)), -1) IN ('X', 'x') THEN
??????????????? TRANSLATE(TO_SINGLE_BYTE(TRIM(A.ID_NUMBER)),
????????????????????????? '0123456789' || TO_SINGLE_BYTE(TRIM(A.ID_NUMBER)), '0123456789') || 'X'
?????????????? ELSE
??????????????? TRANSLATE(TO_SINGLE_BYTE(TRIM(A.ID_NUMBER)),
????????????????????????? '0123456789' || TO_SINGLE_BYTE(TRIM(A.ID_NUMBER)), '0123456789')
???????????? END ID_NUMBER
??????? FROM IDL_SEP_SRC_DATA A,
??????????? IDL_EX_BATCH???? B
?????? WHERE A.ID_TYPE = '01'
???????? AND A.TCIMS_BATCH_ID = B.TCIMS_BATCH_ID
???????? AND B.SERIES_TYPE = '01'
???????? AND B.BATCH_STATUS = '11'
???????? AND B.PREPARE_FLAG = '1';
??? COMMIT;

??? --15位升18
??? INSERT /*+APPEND*/
??? INTO PC_CLEAN_ID_NUMBER_2_TMP
???????? (SYS_ID,ID_NUMBER)
????? SELECT /*+PARALLEL(A 4)*/
?????? A.SYS_ID,
?????? CASE
??<

读书人网 >软件架构设计

热点推荐