在 Oracle 12c 及之后的版本中,'WM_CONCAT' 函数已经被废弃,不再被支持。如果您使用的是 Oracle 19c 版本,建议使用 'LISTAGG' 函数来替代 'WM_CONCAT' 函数。

如果您仍然需要使用 'WM_CONCAT' 函数,可以通过以下步骤来解决:

  1. 下载并安装第三方库包含 'WM_CONCAT' 函数,例如:OraOpenSource 的 'WM_CONCAT' 函数库。

  2. 在数据库中创建 'WM_CONCAT' 函数。可以通过以下 SQL 语句创建:

CREATE OR REPLACE FUNCTION WM_CONCAT (
   p_str    IN VARCHAR2,
   p_delim  IN VARCHAR2 DEFAULT ','
) RETURN VARCHAR2
AS
   l_str   LONG := p_str || p_delim;
   l_idx   PLS_INTEGER;
   l_res   VARCHAR2(32767);
BEGIN
   LOOP
      l_idx := INSTR(l_str, p_delim);
      EXIT WHEN NVL(l_idx, 0) = 0;
      l_res := l_res || SUBSTR(l_str, 1, l_idx - 1) || p_delim;
      l_str := SUBSTR(l_str, l_idx + LENGTH(p_delim));
   END LOOP;
   RETURN RTRIM(l_res, p_delim);
END;
/
  1. 在查询中使用 'WM_CONCAT' 函数。例如:
SELECT deptno, WM_CONCAT(ename)
FROM emp
GROUP BY deptno;

注意:使用第三方库或自定义函数可能存在安全问题和不兼容问题,请谨慎使用。建议使用官方支持的函数。

Oracle 19c 中解决

原文地址: https://www.cveoy.top/t/topic/nAD2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录