LISTAGG导致连接过长

ORacle使用LISTAGG拼接字符串,查询出的结果报错:

ORA-01489: 字符串连接的结果过长

这是原语句:

SELECT i."ID"
    ,i."CORP_NAME"
    ,i."AREA_CODE"
    ,i."AREA_NAME"
    ,i."SOCIAL_CREDIT_CODE"    
    ,l.type
    ,l.LICENSE_NUMBER
FROM YYJG_CORP_INFO i
LEFT JOIN (
    SELECT SOCIAL_CREDIT_CODE
        ,LISTAGG(type, ',') WITHIN
    GROUP (
            ORDER BY SOCIAL_CREDIT_CODE
            ) AS type
        ,LISTAGG(LICENSE_NUMBER, ',') WITHIN
    GROUP (
            ORDER BY SOCIAL_CREDIT_CODE
            ) AS LICENSE_NUMBER
    FROM YYJG_CORP_LICENCE
    GROUP BY SOCIAL_CREDIT_CODE
    ) l ON l.SOCIAL_CREDIT_CODE = i.SOCIAL_CREDIT_CODE

修改表的字符串的大小,换成varchar2为4000都不行,使用:

xmlagg和xmlparse

SELECT SOCIAL_CREDIT_CODE
,xmlagg(xmlparse(content type||',')order by SOCIAL_CREDIT_CODE).getclobval() as type
,xmlagg(xmlparse(content LICENSE_NUMBER||',')order by SOCIAL_CREDIT_CODE).getclobval() as LICENSE_NUMBER
from YYJG_CORP_LICENCE GROUP BY SOCIAL_CREDIT_CODE

搞定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值