Oracle字符串拆分批量处理,多行处理

之前想使用regexp_replace,直接处理多行字符串拆分,使用以前sql处理:

insert into yy1 SELECT  t.xh,       
                REGEXP_SUBSTR(t.ssbw, '[^、]+', 1, level) SSBW from mm1 t
connect by level <= LENGTH(t.ssbw) - LENGTH(regexp_replace(t.ssbw, '、', '')) + 1

数据只有1471条,但是关联出来数据很慢,量又多,导致根本无法处理,因此采用过程块处理,1秒不到就处理完成。

mm1表结构,mm的表结构跟mm1一致:

CREATE TABLE MM1
(
  XH    VARCHAR2(100 BYTE),--主键
  SSBW  VARCHAR2(2000 BYTE)--需要拆分的字段
)

yy1表结构

CREATE TABLE YY1
(
  XH  VARCHAR2(100 BYTE),
  SSBW  VARCHAR2(4000 BYTE)
)

批量处理代码块:

declare
 num int;
begin
num :=0;
for num in 1..1471 loop---循环次数 表示从1开始,1471结束
 delete   mm1;
 commit;
 insert into  mm1  select * from mm where to_number(xh)=num;
 commit;
insert into yy1 SELECT  t.xh,       
                REGEXP_SUBSTR(t.ssbw, '[^、]+', 1, level) SSBW from mm1 t
connect by level <= LENGTH(t.ssbw) - LENGTH(regexp_replace(t.ssbw, '、', '')) + 1;
 commit;
end loop;

end ;

你可能感兴趣的:(oracle,数据库,sql)