SQL> select listagg(ename ||'-'|| empno, ', ') within group (order by ename) result
2 from emp
3 where deptno = 10;
RESULT
--------------------------------------------------------------------------------
CLARK-7782, KING-7839, MILLER-7934
SQL>
如果长度超过4000个字符,请使用xmlagg:
SQL> select rtrim(xmlagg(xmlelement(e, ename ||'-'|| empno ||', ') order by ename).extract('//text()'), ', ') result
2 from emp
3 where deptno = 10;
RESULT
--------------------------------------------------------------------------------
CLARK-7782, KING-7839, MILLER-7934
SQL>
1条答案
按热度按时间fsi0uk1n1#
这不是很明显吗?连接结果超过1000个字符。请使用更大的局部变量(例如
varchar2(30000)
或甚至CLOB
)。另一方面,您真的需要PL/SQL吗?您希望得到多长的结果?如果4000个字符就足够了,请使用
listagg
:如果长度超过4000个字符,请使用
xmlagg
:当然,如果确实需要,这两个函数都可以转换为PL/SQL函数。