我是Oracle和DBMS的新手。现在我对LISTAGG限制长度有疑问。我的公司使用Oracle 11g,所以我不能使用12c的新功能。
我在一个过程中运行此语句(由于公司政策我不能发布整个过程),这是我可以发布的最好的
SELECT LISTAGG(TB.TEST_COL, ', ') WITHIN GROUP (ORDER BY TB.TEST_COL) AS TEST_COLUMN
FROM TEST_TABLE TB
在测试了程序之后,我遇到了这个错误:
ORA-01489: result of string concatenation is too long
我知道发生这种情况是因为LISTAGG的上限为4000
我搜索了SO,他们给出了一些很好的答案,例如使用XMLAGG或更改为CLOB
但是当我尝试使用XMLAGG时,性能要差得多(问题来自客户的数据库,但是我们无权对其进行修改),所以我通过了此选项。
我这样使用SUBSTR
SELECT SUBSTR(LISTAGG(TB.TEST_COL, ', ') WITHIN GROUP (ORDER BY TB.TEST_COL), 1, 3000) AS TEST_COLUMN
FROM TEST_TABLE TB
它不起作用
我的问题是:是否有一种方法可以在运行过程之前限制LISTAGG的结果,而无需使用XMLAGG或编写函数?