oracle listagg - 字符串连接的结果太长

问题描述:

我有一个问题,我无法解决。我有这样的说法:oracle listagg - 字符串连接的结果太长

SELECT account, 
    listagg(field1 || ', ') WITHIN 
GROUP (
     ORDER BY field1 
     ) AS field1 
FROM TABLE1 
GROUP BY account 

我得到一个错误:

ORA-01489: result of string concatenation is too long 01489. 00000 - "result of string concatenation is too long" *Cause: String concatenation result is more than the maximum size. *Action: Make sure that the result is less than the maximum size.

如何解决?我试图做到这一点,但它并没有帮助的SQL函数返回一个字符串必须符合的最高限额内,这是4000

SUBSTR(listagg(field1 || ', ') WITHIN 
GROUP (
     ORDER BY field1 
     ), 1, 500) AS field1 
+0

如果连接时间过长,那么明显的解决方案是不是将其截断? –

结果(现在的32K甲骨文12C如果max_string_size=extended)。

你不能用SUBSTR截断它,因为那时已经太晚了 - 这是LISTAGG函数本身引发的异常。

解决此问题的唯一方法是确保被连接的记录数量受到限制 - 例如,对每个account返回的记录数量设置最大上限,和/或截断每个文件的长度field1本身。

+1

或使用'XMLAGG'。 –

+0

@Lalit,谢谢你是对的,只需要对应用程序进行一些更改。 –