[Oracle] 字符串解析生成关联数据

[size=large]由于项目功能有时候需从其他部门提供的Excel... 等其他文档中,往数据库表不间断的塞入一些数据, 所以就写了个简单的解析 过程 避免重复工作;
整理出来分享下[/size]


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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值