去掉 PL/SQL 函数末尾的逗号 [Oracle PL/SQL]

Posted

技术标签:

【中文标题】去掉 PL/SQL 函数末尾的逗号 [Oracle PL/SQL]【英文标题】:Getting rid of comma at the end of PL/SQL Function [Oracle PL/SQL] 【发布时间】:2020-11-05 07:30:59 【问题描述】:

我正在研究一个存储的 PL/SQL 函数,该函数通过给定的员工编号查找员工的家属姓名。到目前为止,我能够获得所需的输出,但在输出期间似乎存在逗号问题。关于如何在输出期间删除最后一个括号的任何帮助表示赞赏。

[当前代码]

SQL> create or replace function FINDDEPENDENTS(empid in Employee.E#%TYPE)
  2  RETURN VARCHAR IS
  3  EID Employee.E#%TYPE;
  4  Ename Employee.Name%TYPE;
  5  
  6  DEPNAME Dependent.DName%TYPE;
  7  finalRow VARCHAR(2000);
  8  CURSOR q IS
  9  --
 10  select DName from Dependent WHERE E#=empid;
 11  begin
 12  select E#, Name INTO EID, Ename FROM Employee WHERE E#= empid;
 13  finalRow:= EID || ' ' || Ename || ': ';
 14  open q;
 15  loop
 16  fetch q into depname;
 17  if q%notfound then exit;
 18  end if;
 19  finalRow:= finalRow || DEPNAME || ', ';
 20  end loop;
 21  close q;
 22  return(finalRow);
 23  end FINDDEPENDENTS;
 24  /

Function created.

SQL> show errors
No errors.
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.

如何去掉最后一个逗号,以便得到如下输出:

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

【问题讨论】:

使用listagg()有什么问题? 【参考方案1】:

TRIM它:

return(rtrim(finalRow, ','));

【讨论】:

我可以知道我在哪里可以在我的代码中实现它。抱歉,我对 sql 比较陌生。【参考方案2】:

使用TRIM函数:

create or replace function foo (s varchar2) return varchar2 is
begin 
    return trim (trailing ',' from s);
end;
/
var ret varchar2 
exec :ret := foo ('foo,') 

RET
---
foo

【讨论】:

【参考方案3】:

您可以使用答案之一中提到的RTRIM,但您也可以使用以下逻辑来阻止此类数据的创建。

使用

finalRow:= finalRow || CASE WHEN SUBSTR(finalRow ,-2) <> ': ' THEN ',  ' END || DEPNAME;

代替

finalRow:= finalRow || DEPNAME || ', ';

【讨论】:

以上是关于去掉 PL/SQL 函数末尾的逗号 [Oracle PL/SQL]的主要内容,如果未能解决你的问题,请参考以下文章

Oracle PL/SQL 程序在源表中拆分逗号分隔的数据并推送到目标表中

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

oracle字段中含特殊字符

如何在选择语句的“NOT IN”子句中使用逗号分隔的字符串列表作为 pl/sql 存储的函数参数

如何计算 SQL 或 PL/SQL 中字符串末尾的此字符的实例数?

生成.txt文件并插入到oracle表pl/sql中