【问题标题】:Having issue with commas during output for Oracle PLSQL function在 Oracle PLSQL 函数的输出过程中出现逗号问题
【发布时间】: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;
/

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

【问题讨论】:

    标签: oracle function plsql


    【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-12
        • 2016-02-03
        • 2011-02-16
        • 1970-01-01
        • 2013-12-12
        • 2013-02-02
        • 1970-01-01
        • 2020-04-02
        相关资源
        最近更新 更多