【问题标题】:oracle listagg - result of string concatenation is too long [duplicate]oracle listagg - 字符串连接的结果太长[重复]
【发布时间】:2016-01-14 15:52:02
【问题描述】:

我有一个无法解决的问题。我有这样的声明:

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

【问题讨论】:

  • 如果连接太长,那么明显的解决方案不是截断它吗?

标签: sql oracle listagg


【解决方案1】:

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

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

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

【讨论】:

  • @Lalit,谢谢,没错,只是需要对应用程序进行一些更改。
猜你喜欢
  • 2012-11-27
  • 2015-06-28
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 2013-01-29
  • 2021-07-04
  • 1970-01-01
相关资源
最近更新 更多