在 Oracle PLSQL 函数的输出过程中出现逗号问题

Posted

技术标签:

【中文标题】在 Oracle PLSQL 函数的输出过程中出现逗号问题【英文标题】:Having issue with commas during output for Oracle PLSQL function 【发布时间】:2020-11-04 03:35:17 【问题描述】:

目前正在处理一个存储的 PL/SQL 函数 FINDDEPENDENTS,它通过给定的员工编号 (e#) 查找员工的家属姓名。然后,该函数必须返回包含所有家属姓名的字符串。所有家属的姓名必须用逗号 (,) 分隔。

这是所需输出的片段:

00100 Albert: Bolt, Edee, Judy
00110 Alvin:
00120 Alice: Blures, Edee, Kadi

我目前的输出:

SQL> select FINDDEPENDENTS(E#) from Employee;

FINDDEPENDENTS(E#)
----------------------------------------------------------------------------------------------------
00100 Albert:, Bolt, Edee, Judy
00101 Peter:
00103 Ami:
00105 Robert:
00107 Wendy:
00109 Michael:
00110 Alvin:
00120 Alice:, Blues, Edee, Kadi
00125 Angela:
00136 Aban:
00150 Bob:
00187 Eadger:
00200 Carl:, Eva
00250 Douglass:

14 rows selected.

我当前的代码:

set echo on
set feedback on
set linesize 100
set pagesize 200
set serveroutput on
--
create or replace function FINDDEPENDENTS(empid in Employee.E#%TYPE)
RETURN VARCHAR IS
EID Employee.E#%TYPE;
Ename Employee.Name%TYPE;

DEPNAME Dependent.DName%TYPE;
finalRow VARCHAR(2000);
CURSOR q IS
--
select DName from Dependent WHERE E#=empid;
begin
select E#, Name INTO EID, Ename FROM Employee WHERE E#= empid;
finalRow:= EID || ' ' || Ename || ': ';
open q;
loop
fetch q into depname;
if q%notfound then exit;
end if;
finalRow:= finalRow || ', ' || DEPNAME;
end loop;
close q;
return(finalRow);
end FINDDEPENDENTS;
/

如何编辑输出以使 : 后没有逗号?

【问题讨论】:

【参考方案1】:

可能有一些方法可以使用 if else 或 trim 来操作字符串,或者可能使用正则表达式来删除它,但我建议使用 listagg 连接依赖名称。即将光标q更改为,

CURSOR q IS
--
select listagg(DName,', ') WITHIN GROUP (ORDER BY DName) from Dependent WHERE E#=empid;

或者

我相信你必须有一些目的才能拥有一个 PL/SQL 块,但它也可以通过一个查询来完成,就像可以在 PL/SQL 代码中进一步使用的东西一样,

 SELECT e# || ' ' || NAME || ': ' || listagg(DName,', ') WITHIN GROUP (ORDER BY DName)
   INTO finalRow
   FROM   employee e
   LEFT JOIN DEPENDENT d ON e.e# = d.e#
   WHERE  e# = empid;

【讨论】:

【参考方案2】:

如果不想更新函数代码,最简单的方法是使用TRIM函数,如下所示:

select TRIM(',' FROM FINDDEPENDENTS(E#))  from Employee;

【讨论】:

以上是关于在 Oracle PLSQL 函数的输出过程中出现逗号问题的主要内容,如果未能解决你的问题,请参考以下文章

在PLSQL中,存储过程的输出参数最大支持多大

plsql调用oracle存储过程有输入参数和输出参数 sql语句怎么写如题 谢谢了

需要 Oracle PLSQL 函数的输出帮助

如何使用plsql导出oracle数据建表语句,存储过程,视图.以及表中数据

JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数

JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数