需求简化描述:
Oralce 一条数据按照特定格式拆分成多行数据
如:1;2;3
拆分成:
1
2
3
源数据如图:
最开始我是这么写的
SELECT DISTINCT
REGEXP_SUBSTR( hscbzx, '[^;]+', 1, ROWNUM )
FROM
yszx
WHERE
id = '"+yszxId+"'
connect by LEVEL <=regexp_count(hscbzx, ';') + 1
执行速度惨不忍睹,直接创造纪录,去网上查了下,解释说是regexp_substr regexp_count ,都使用了正则,正则功能强大,但效率很低,然后还用了connect by 递归查询~,检查了下sql,把connect by 后面的regexp_count 优化了下,如下
改成了这样
SELECT DISTINCT
REGEXP_SUBSTR( hscbzx, '[^;]+', 1, ROWNUM )
FROM
yszx
WHERE
id = '"+yszxId+"'
connect by LEVEL <=LEN