select wm_concat(colA) as colA from tableA

java.sql.SQLException: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小 ORA-06512: 在 "WMSYS.WM_CONCAT_IMPL", line 30 )

wm_concat的最大长度只有4000,超过就会报错,

两种方法:

(1)转clob类型

select --wm_concat(colA) as colA
rtrim(xmlagg(xmlparse(content colA || ',' wellformed) ORDER BY colA).getclobval(),',') as colA  from tableA;

(2)先转clob,再转varchar2,但是长度还是只能4000

select --wm_concat(colA) as colA
dbms_lob.substr(rtrim(xmlagg(xmlparse(content colA || ',' wellformed) ORDER BY colA).getclobval(),','),4000) as colA  from tableA;

这是别人的方法:http://blog.csdn.net/l2tp1012/article/details/30744371

当执行sql:select wm_concat(colA) as colA from tableA提示:java.sql.SQLException: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小 ORA-06512: 在 "WMSYS.WM_CONCAT_IMPL", line 30 )wm_concat的最大长度只有4000,超过就会报错,
函数 wm _ concat (列名)该 函数 可以把列值以“,”号分隔起来,并显示成一行 但是进行拼串的时候,返回是 字符 串类型,可能遇到拼串形成的结果集大于 4000 ,这时候,系统会提示, 超过 系统限制。 解决 办法 : XMLAGG(XMLELEMENT(E, 列名 || ',')).EXTRACT('//text()').getclobval() 是先将列名组装成以“,”号分隔的xml,再转成
--使用这个sql查询返回值为:1,2,3,4,5,6,7,8,9 select listagg(id, ',') within group (order by id) from ( select level as id from dual connect by level < 10 --但如果将level改成2000就
在我的BLOG中第一篇文章写的就是 字符 串聚合连接的例子:http://yangtingkun.itpub.net/post/468/3380。 后来还写过一篇用SQL实现相同功能的文章:http://yangtingkun.itpub.net/post/468/388003。 不过上面两种方法都会面临一个问题,就是如果聚集连接的 字符 长度 如果 超过 了VARCHAR2类型所允许的 最大 长度 ,就会导致
描述:首先使用 WM _ CONCAT 行转列,但是中间有一次出问题,所以前面加上了一个to_char( WM _ CONCAT ()), 这次是因为to_char的时候缓存 长度 不能 超过 4000 ; 去掉to_char方法 WM _ CONCAT 换成 RTRIM(XMLAGG(XMLPARSE(CONTENT 列名 || ',')) .GETCLOBVAL(), ',...
转:http://blog.itpub.net/28998293/viewspace-1353103/ Oracle 10g版本的 wm _ concat 为varchar2( 4000 ),在使用 wm _ concat 函数 时,在 字符 长度 超过 4000 后报错,所以自定义一个类似的聚集 函数 ,在内部使用CLOB 处理 ,避免超长问题。 Oracle 11g版本的vm_ concat 返回类型为clob。 源码如下:--先
在进行使用 WM _ CONCAT 进行列转行的 字符 串拼接时,可能会遇到 长度 超过 4000 的情况。这个时候 oracle 会报错。所以,在这个时候,最好的 处理 办法 就是将结果集 处理 成CLOB格式。 下面是自定义的行转列 函数 。 CREATE OR REPLACE TYPE zh_ concat _im AUTHID CURRENT_USER AS OBJECT CURR_STR clob, STATIC FUNC...
oracle 中listagg 字符 串拼接不能过长遇到的坑 有时候写程序遇到需要拼接的列表展示,然后就用了 oracle 中的listagg listagg(id, ',')within group(order by id) as itemId; 这个只能说能满足数据量,拼接 字符 串不多的需求,如果遇到 字符 串过多的就拉闸了,解决 办法 : xmlagg(xmlparse(content id||',' wellformed) order by id).getclobval() as id 用了之后呢,你会发现,他最后
oracle wm _ concat (column) 函数 使我们经常会使用到的,下面就教您如何使用 oracle wm _ concat (column) 函数 实现字段合并,如果您对 oracle wm _ concat (column) 函数 使用方面感兴趣的话,不妨一看。shopping:—————————————–u_id       goods            num——————————————1                苹果                22                 梨子               51                 西瓜               4
场景:使用select wm _ concat (xxxxx) from table 的时候 返回的 字符 串过长 解决方案 :使用to_clob 将 字符 串转成 clob类型,但是由于使用的前端框架不能解析clob类型的值       再将clob转化成String类型 List<Map> olists=oDao.queryOrgRoleInfo(qu...
DBMS_LOB.SUBSTR() 会将clob转为 varchar2,而varchar2是有 长度 限制的 为 4000 (存储过程里 Oracle 10g 最大 4000 , Oracle 12 可达32767)。 当大字段 超过 4000 时就会报错。 解决方法: 对CLOB字段进行截取然后在进行拼接,截取的 长度 根据存储的是汉字和数据决定 长度 。 --第二位表示要截取的 字符 串的 长度 --第三位表示截取 字符 串的开始位置(注:等于0或1时,都是从第一位开始截取) SELECT dbms_lob.substr('xxxxx',
Oracle 数据库中, wm _ concat 函数 用于将指定的列合并为一个 字符 串,并且将结果作为一个长 字符 大型对象(CLOB)返回。然而, wm _ concat 函数 并不是 Oracle 官方支持的 函数 ,它是由 Oracle 内部使用的一个 函数 ,所以在使用 wm _ concat 函数 时需要注意以下几点: 1. wm _ concat 函数 只能在 Oracle 11g Release 2之前的版本中使用。在 Oracle 11g Release 2及更高版本中, Oracle 已经提供了LISTAGG 函数 来实现类似的功能。 2. wm _ concat 函数 只能用于查询中,而不能用于INSERT、UPDATE或DELETE语句中。 3. wm _ concat 函数 的返回值类型为CLOB,因此需要使用TO_CHAR 函数 将其转换为VARCHAR2类型才能进行比较或其他操作。 以下是一个使用 wm _ concat 函数 的示例: SELECT deptno, wm _ concat (ename) AS employees FROM emp GROUP BY deptno; 该查询将会返回每个部门的员工姓名列表,以逗号分隔,并且将结果作为CLOB类型的employees列返回。