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

时间:2015-10-16 01:43:27

标签: sql oracle listagg

我遇到了无法解决的问题。我有这样的声明:

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

我收到错误:

  

ORA-01489:字符串连接的结果太长   01489. 00000 - "字符串连接的结果太长"   *原因:字符串连接结果超过最大大小。   *操作:确保结果小于最大大小。

如何解决?我试图这样做,但它没有帮助

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

1 个答案:

答案 0 :(得分:1)

返回字符串的SQL函数的结果必须符合最大限制,即4000(如果max_string_size=extended,现在在Oracle 12c中为32K)。

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

解决此问题的唯一方法是确保连接的记录数量有限 - 例如,通过对每个account返回的记录数量设置最大上限,和/或缩短长度每个field1本身。