问题原因:
当使用 LISTAGG 函数进行字符串拼接时,如果拼接效果凌驾了 VARCHAR2 类型的最大长度(默认是 4000 字符),就会抛出 ORA-01489: 字符勾通接的效果过长 错误。
语法:
- SELECT LISTAGG(ZJRXM, ',') WITHIN GROUP (ORDER BY ZJRXM)
- FROM LY_SJS_WDJZ_ZJRGL;
复制代码 图片形貌:
办理方法一:
使用 CLOB 类型替换 VARCHAR2
LISTAGG 函数本身会返回一个 VARCHAR2 类型的效果,如果拼接的字符串凌驾了 VARCHAR2 的最大限定,可以考虑将拼接的效果转为 CLOB 类型。CLOB 类型支持更长的字符串。
语法:
- SELECT TO_CLOB(LISTAGG(ZJRXM, ',') WITHIN GROUP (ORDER BY ZJRXM))
- FROM LY_SJS_WDJZ_ZJRGL;
复制代码
办理方法二:
使用 XMLAGG 函数替换 LISTAGG
XMLAGG 函数可以用于拼接字符串,并且它返回一个 CLOB 类型的效果,因此不会受到 VARCHAR2 限定。这是一个常见的替换方法。
- SELECT RTRIM(XMLCAST(XMLAGG(XMLELEMENT(e, ZJRXM || ',') ORDER BY ZJRXM)
- AS CLOB), ',')
- FROM LY_SJS_WDJZ_ZJRGL;
复制代码
办理方法三:
xmlagg + xmlparse 来办理该问题
- --解决方法3:
- SELECT xmlagg(xmlparse(content ZJRXM||',') order by ZJRXM).getclobval()
- FROM LY_SJS_WDJZ_ZJRGL;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |