在 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调用oracle存储过程有输入参数和输出参数 sql语句怎么写如题 谢谢了
如何使用plsql导出oracle数据建表语句,存储过程,视图.以及表中数据