sql - 在 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,但它不起作用?我们可以使用函数来获取它还是有任何其他方法?
解决方案
这是一个示例,它显示了您可能使用的两个选项;如果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>
推荐阅读
- swagger - 如何更改 Swagger Codegen 生成的 JavaScript 模块名称?
- python - while循环Python中的计数器问题
- opencv - 图像直方图(技术查询)
- xml - 如何正确使用 XSD 文件中的扩展名?
- angular - 如何浏览formGroup的值?
- java - Bean中冲突时Spring Bean创建异常
- html - Word 覆盖文本和元素节点和换行
- python - 使用 opencv 提高计数 blob 的准确性
- pandas - pandas:特殊字符和 EOL 上的 str.split
- javascript - 缓慢和滞后的javascript