某表若干记录
ID--------type
1---------a,b,c,s,fas,dasd,asd
2---------a,b,c,s,fas
11--------sd,asdtype 里面有可能只有1个或任意多个属性且由逗号隔开,我想把数据变成如下形式:
ID--------type
1---------a
1---------b
1---------c
1---------s
1---------fas
1---------dasd
1---------asd
2---------a
2---------b
2---------c
2---------s
2---------fas
11--------sd
11--------asd
这张表近600万的记录,求最快捷的方法,最好也考虑到迁移。
ID--------type
1---------a,b,c,s,fas,dasd,asd
2---------a,b,c,s,fas
11--------sd,asdtype 里面有可能只有1个或任意多个属性且由逗号隔开,我想把数据变成如下形式:
ID--------type
1---------a
1---------b
1---------c
1---------s
1---------fas
1---------dasd
1---------asd
2---------a
2---------b
2---------c
2---------s
2---------fas
11--------sd
11--------asd
这张表近600万的记录,求最快捷的方法,最好也考虑到迁移。
--从t(id,type1)插入备份表t_bak(id,type1)
--数据量大,可按条件每次做一部分
BEGIN
FOR c IN (SELECT id,type1 FROM t) LOOP
INSERT INTO t_bak
(id, TYPE1)
SELECT c.id, TYPE1
FROM (WITH t AS (SELECT c.TYPE1 str FROM dual)
SELECT substr(str,
instr(str, ',', 1, LEVEL) + 1,
instr(str, ',', 1, LEVEL + 1) -
instr(str, ',', 1, LEVEL) - 1) TYPE1
FROM (SELECT ',' || str || ',' str FROM t)
CONNECT BY LEVEL < length(str) - length(REPLACE(str, ','));
);
END LOOP;
END;
/