【发布时间】:2019-04-01 06:59:43
【问题描述】:
如何在 Oracle 中返回一个类似于 PostgreSQL 的 ARRAY_AGG 函数的数组?
SELECT
ARRAY_AGG(EMAIL)
FROM
EMPLOYEES
WHERE
EMAIL IS NOT NULL
AND
ORGANIZATION_ID IN (27623,27734)
【问题讨论】:
-
好吧,如果我使用这篇文章中推荐的
LISTAGG函数,它会引发错误:ORA-01489: result of string concatenation is too long。您还有其他想法吗? -
谷歌错误:你会得到其他几种选择
-
在 Google 中,我发现建议使用
XMLAGG函数,但我不知道在这种情况下这是最佳实践。我使用RTRIM(XMLAGG(XMLELEMENT(e, EMAIL, ',').EXTRACT('//TEXT()')).GetClobVal(), ',') EMAILS,它可以工作。 -
您有两个选择,要么完全重新考虑存储和使用如此大数据的方式,即完全避免串联。如果不可能,则使用替代方案(例如 xmlagg,使用 clob 的用户定义函数等)