oracle 19c wm_concat
Oracle中的wm_concat函数已经被弃用,可以使用LISTAGG函数来替代。LISTAGG函数可以将多行数据合并成一个字符串,并且可以指定分隔符。例如:
SELECT deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees FROM emp GROUP BY deptno;
这个查询将会按照部门号分组,将每个部门的员工姓名用逗号分隔合并成一个字符串。
oracle 19c 重建wm_concat
Oracle中的wm_concat函数已经被弃用,可以使用LISTAGG函数来替代。LISTAGG函数可以将多行数据合并成一个字符串,并且可以指定分隔符。例如:
SELECT deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees FROM emp GROUP BY deptno;
这个查询将会按照部门号分组,将每个部门的员工姓名用逗号分隔合并成一个字符串。
sql WM_CONCAT
关于 SQL 中 WM_CONCAT
函数的使用方法
在 Oracle 数据库中,WM_CONCAT
是一个用于字符串聚合的函数,在早期版本如 11g 广泛应用。然而到了更高版本例如 19c 后,该内置功能被移除并建议采用其他替代方案[^3]。
使用示例
下面是一个基于旧版Oracle数据库中的查询语句例子:
SELECT /*+ MONITOR */
d.dname,
WM_CONCAT(e.ename) AS employees
FROM emp e
JOIN dept d ON e.deptno = d.deptno
GROUP BY d.dname
ORDER BY d.dname;
此段代码尝试获取部门名称以及对应员工姓名列表,并开启实时监控以便跟踪性能表现[^1]。
由于高版本不再支持原生WM_CONCAT
, 用户可以考虑创建自定义实现来达到相同效果:
CREATE OR REPLACE FUNCTION my_concat (input IN SYS_REFCURSOR)
RETURN VARCHAR2 IS
result VARCHAR2(4000);
BEGIN
FOR rec IN input LOOP
IF result IS NULL THEN
result := rec.column_value;
ELSE
result := result || ',' || rec.column_value;
END IF;
END LOOP;
RETURN result;
END;
/
上述 PL/SQL 块展示了如何构建一个新的字符串连接函数my_concat()
作为原有WM_CONCAT
的替换选项之一。
相关推荐













