日期:2014-05-17  浏览次数:20997 次

最近做一个存储过程拆分数据
做了个拆分字符串的存储过程,但是我想把拆分下来的字段,再进行拆分当成字段,该怎么嵌套,
例如  字符串是“aaa|bbb|ccc|ddd,cccc|ddd|aaaa|fffff”

第一次拆成   
----------------------------------
aaa|bbb|ccc|ddd
cccc|ddd|aaaa|fffff
第二次拆成
--------------------------------
aaa      bbb           ccc          ddd  
cccc     ddd           aaaa       ffffff


这样怎么嵌套?
------解决方案--------------------
  SELECT  regexp_substr(col,'[^
------解决方案--------------------
]+',1,1),regexp_substr(col,'[^
------解决方案--------------------
]+',1,2),regexp_substr(col,'[^
------解决方案--------------------
]+',1,3),regexp_substr(col,'[^
------解决方案--------------------
]+',1,4)  FROM 
   ( SELECT regexp_substr('aaa
------解决方案--------------------
bbb
------解决方案--------------------
ccc
------解决方案--------------------
ddd,cccc
------解决方案--------------------
ddd
------解决方案--------------------
aaaa
------解决方案--------------------
fffff','[^,]+',1,1) col FROM dual
    UNION ALL 
    SELECT regexp_substr('aaa
------解决方案--------------------
bbb
------解决方案--------------------
ccc
------解决方案--------------------
ddd,cccc
------解决方案--------------------
ddd
------解决方案--------------------
aaaa
------解决方案--------------------
fffff','[^,]+',1,2) FROM dual
   )
死办法,如果个数不确定,就麻烦了。。。
------解决方案--------------------
引用:
目的是直接拆成第二种情况


你自己再简单的修改一下即可
with t as
 (select 'aaa
------解决方案--------------------
bbb
------解决方案--------------------
ccc
------解决方案--------------------
ddd,cccc
------解决方案--------------------
ddd
------解决方案--------------------
aaaa
------解决方案--------------------
fffff' book_nm from dual)

select rn, REGEXP_SUBSTR(str, '[^
------解决方案--------------------
]+', 1, LEVEL)
  from (select rownum rn, REGEXP_SUBSTR(book_nm, '[^,]+', 1, LEVEL) STR
          from (select rownum id, t.* from t) t1
        connect by level <=
                   length(book_nm) - length(replace(book_nm, ',', '')) + 1
               and id = prior id