怎样办理Oracle中 ORA-01489: 字符勾通接的效果过长问题

打印 上一主题 下一主题

主题 927|帖子 927|积分 2783

问题原因:

            当使用 LISTAGG 函数进行字符串拼接时,如果拼接效果凌驾了 VARCHAR2 类型的最大长度(默认是 4000 字符),就会抛出 ORA-01489: 字符勾通接的效果过长 错误。
  语法: 

  1. SELECT LISTAGG(ZJRXM, ',') WITHIN GROUP (ORDER BY ZJRXM)
  2. FROM LY_SJS_WDJZ_ZJRGL;
复制代码
图片形貌:


办理方法一:

使用 CLOB 类型替换 VARCHAR2
      LISTAGG 函数本身会返回一个 VARCHAR2 类型的效果,如果拼接的字符串凌驾了 VARCHAR2 的最大限定,可以考虑将拼接的效果转为 CLOB 类型。CLOB 类型支持更长的字符串。
  语法:
  1. SELECT TO_CLOB(LISTAGG(ZJRXM, ',') WITHIN GROUP (ORDER BY ZJRXM))
  2. FROM LY_SJS_WDJZ_ZJRGL;
复制代码

办理方法二: 


使用 XMLAGG 函数替换 LISTAGG
     XMLAGG 函数可以用于拼接字符串,并且它返回一个 CLOB 类型的效果,因此不会受到 VARCHAR2 限定。这是一个常见的替换方法。
  1. SELECT RTRIM(XMLCAST(XMLAGG(XMLELEMENT(e, ZJRXM || ',') ORDER BY ZJRXM)
  2. AS CLOB), ',')
  3. FROM LY_SJS_WDJZ_ZJRGL;
复制代码

 办理方法三:

xmlagg + xmlparse 来办理该问题 
  1. --解决方法3:
  2. SELECT xmlagg(xmlparse(content ZJRXM||',') order by ZJRXM).getclobval()
  3. FROM LY_SJS_WDJZ_ZJRGL;
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表