我遇到了无法解决的问题。我有这样的声明:
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
答案 0 :(得分:1)
返回字符串的SQL函数的结果必须符合最大限制,即4000(如果max_string_size=extended
,现在在Oracle 12c中为32K)。
你不能用SUBSTR
截断它,因为到那时已经太晚了 - 它是LISTAGG
函数本身就会引发异常。
解决此问题的唯一方法是确保连接的记录数量有限 - 例如,通过对每个account
返回的记录数量设置最大上限,和/或缩短长度每个field1
本身。