Oracle plsql:逐行返回表

qkf9rpyu  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(192)

我的任务是使用涉及多个表的存储plsql过程返回查询结果。目前,我编写的代码如下所示:
第一个
每次我尝试我得到的要么是函数错误,要么是太小的字符串缓冲区错误,并不完全确定这是否是正确的方法。
有人能帮我弄明白吗?

fsi0uk1n

fsi0uk1n1#

这不是很明显吗?连接结果超过1000个字符。请使用更大的局部变量(例如varchar2(30000)或甚至CLOB)。
另一方面,您真的需要PL/SQL吗?您希望得到多长的结果?如果4000个字符就足够了,请使用listagg

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>

当然,如果确实需要,这两个函数都可以转换为PL/SQL函数。

相关问题