由于项目功能有时候需从其他部门提供的Excel... 等其他文档中,往数据库表不间断的塞入一些数据, 所以就写了个简单的解析 过程 避免重复工作;
整理出来分享下
CREATE OR REPLACE PROCEDURE PRO_STR_ANALYZING_INSERT_DATA(
DATA_NAMES VARCHAR2,
DATA_NUMBERS VARCHAR2,
REAMK VARCHAR2 DEFAULT 'PRO_CREATE') AS
-- 组编码
NEW_GROUP_CODE VARCHAR2(20);
--类型
TYPE VAR20 IS TABLE OF VARCHAR2(20);
--DATA(字符串过长时,需扩大字节数)
CNAME VARCHAR2(1024);
CNUMBER VARCHAR2(1024);
--初始化
NAMES VAR20 := VAR20();
NUMBERS VAR20 := VAR20();
I INTEGER DEFAULT 0;
DATA_LEN INTEGER DEFAULT 0;
BEGIN
-- DATA format
/*CNAME := ',王佳冰,刘玉龙,王建华,';
CNUMBER := ',15895985619
,15951902106
,18951853833
,';*/
CNAME := REPLACE(REPLACE(DATA_NAMES,CHR(10),''), ' ', '');
CNUMBER := REPLACE(REPLACE(DATA_NUMBERS,CHR(10),''), ' ', '');
--数据分割后个数
DATA_LEN := LENGTHB(REGEXP_REPLACE(CNUMBER, '[^,]+', ''));
--插入关联主表数据
NEW_GROUP_CODE := TEST_TABLE1_SEQ.NEXTVAL;
INSERT INTO TEST_TABLE_1(ID, CODE) VALUES(GID, NEW_GROUP_CODE);
--解析生成联系人信息
IF DATA_LEN < 1 THEN
ROLLBACK;
RETURN;
END IF;
LOOP
I := I+1;
EXIT WHEN I > DATA_LEN;
--增加集合长度
NAMES.EXTEND;
NUMBERS.EXTEND;
--SUBSTR开始位置截取对应个数字符, REPLACE 替换空格
NAMES(I) := SUBSTR(CNAME,INSTR(CNAME,',',1,I)+1,(INSTR(CNAME,',',1,I+1)-2) - (INSTR(CNAME,',',1,I)+1));
NUMBERS(I) := SUBSTR(CNUMBER,INSTR(CNUMBER,',',1,I)+1,
(INSTR(CNUMBER,',',1,I+1)-2) - INSTR(CNUMBER,',',1,I)+1);
--关联表
INSERT INTO TEST_TABLE_GROUP(ID,TEST_TABLE1_ID
contact_name,mobile_number)
VALUES (SYS_GUID(),NEW_GROUP_CODE
NAMES(I), NUMBERS(I));
END LOOP;
COMMIT;
END;