整理出来分享下
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;