你的oracle版本是多少的?  应该是早期wm_concat用的varchar2(4000) 的字符超过4000了。 
10.2还是11g 已经改成blob了

解决方案 »

  1.   

    应该是11G改的,11g之后还增加了一种新用法listagg,功能基本相同,但是他可以控制连接的顺序及连接符,用法可以百度下
      

  2.   

    10.2.0.5以及11g的wm_concat返回的是CLOB
    如果聚合以后字符串会超过4000字节,可以考虑自定义一个相同功能的函数来代替wm_concat
      

  3.   


    在外面包一个substr依然不行么?
      

  4.   

    不行。因为substr的传入参数依然是varchar2,截取前就会先报错了
    如果是10.2.0.5以上的版本,也就是说,如果wm_concat返回的是clob类型,那么可以先使用dbms_lob.substr先截取后,再to_char转成varchar2,如果wm_concat返回的是varchar2类型,那么只能自己建个函数来使用