首页 > 解决方案 > 在 oracle 中使用 listagg 时出错“STRING concatenation too long”

问题描述

我有一张像 temp_a 这样的表:

acc ai_tab   where
A   B        QQQQ
A   B        RRRR
C   D        SSSS
C   D        TTTT

该列where存储的字符串太大。所以,我的预期输出是

acc ai_tab where 
A   B      QQQQ RRRR
C   D      SSSS TTTT

我尝试使用以下方法实现此目的:

 select acc,ai_tab,LISTAGG(WHERE,'') WITHIN GROUP ORDER BY (acc) "where_cond2" from temp_a
group by acc,ai_tab;

我得到的错误是:

ORA-01489 :result of string concatenation is too long.

我搜索了这个类似的问题,它说也使用 XMLCLOB,但它不起作用?我们可以使用函数来获取它还是有任何其他方法?

标签: sqloracleoracle12clistagg

解决方案


这是一个示例,它显示了您可能使用的两个选项;如果listagg失败,请尝试xmlagg

SQL> SELECT RTRIM (
  2            XMLAGG (XMLELEMENT (e, ename || ' ') ORDER BY empno).EXTRACT (
  3               '//text()'),
  4            ', ')
  5            employees_1,
  6         --
  7         LISTAGG (ename, ' ') WITHIN GROUP (ORDER BY empno) employees_2
  8    FROM emp
  9   WHERE deptno = 10;

EMPLOYEES_1                    EMPLOYEES_2
------------------------------ ------------------------------
CLARK KING MILLER              CLARK KING MILLER

SQL>

推荐阅读