将一行数据变为多行,例如:

原始写法,效率很低,特别是数据量稍微大点时基本就跑不出来了

SELECT REGEXP_SUBSTR(A.ORDERID,'[^,]+', 1, LEVEL) AS ORDERID
FROM
        (
                SELECT  ORDERID
                FROM    orders
                WHERE   INSTR(ORDERID,',')>0
                        AND BILLTYPE      =1004
                        AND NVL(STATUS,0) =0
                        AND PERMIT        =1
        )
A CONNECT BY REGEXP_SUBSTR(A.ORDERID, '[^,]+', 1, LEVEL) IS NOT NULL

ORDERID
--------------------------------------------------------------------------------
89970,89962
90154,90145
90186,90187

优化后的写法

select distinct regexp_substr(t1.ORDERID, '[^,]+', 1, level) as ORDERID
from (SELECT id,ORDERID
      FROM orders
      WHERE INSTR(ORDERID,',')>0
        AND BILLTYPE      =1004
        AND NVL(STATUS,0) =0
        AND PERMIT        =1
    ) t1
connect by t1.ID = prior t1.ID
and prior dbms_random.value is not null
and level <= length(t1.ORDERID) - length(regexp_replace(t1.ORDERID, ',', '')) + 1 ;

ORDERID
--------------------------------------------------------------------------------
89962
89970
90145
90154
90186
90187


 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐