【发布时间】:2021-10-12 07:48:32
【问题描述】:
我有一个关于 Oracle 的问题:我想将多行组合成一个以逗号分隔的单行。
create table emp ( empid varchar2 (100));
insert into emp values ('90322');
insert into emp values ('89333');
insert into emp values ('458999');
基于以上数据,我希望输出如下:
'90322', '89333', '458999'
我尝试使用此代码:
select listagg(empid ,', ') within group(order by empid ) csv
from emp;
或
select rtrim(xmlagg(xmlelement(e,empid,', ').extract('//text()') order by empid).getclobval(),', ') x
from emp;
它只适用于几行。如果emp 表有超过 5000 行,那么它不再工作,我得到一个错误:
错误执行 1:1 ORA-01489: 字符串连接的结果太长
请告诉我如何编写查询以在 Oracle 中完成此任务。
【问题讨论】:
-
第二条语句应该可以工作(在数据库版本 12.2 和 18 上尝试了 50k ID 成功,而版本 11 发生超时在同一个小提琴上,但没有错误)
标签: sql oracle oracle11g group-concat