结合使用WMSYS.WM_CONCAT和Oracle XE 10g [英] Using WMSYS.WM_CONCAT with Oracle XE 10g

查看:159
本文介绍了结合使用WMSYS.WM_CONCAT和Oracle XE 10g的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试将WMSYS.WM_CONCAT与Oracle XE 10g一起使用时,出现编译错误:ORA-00904: "WMSYS"."WM_CONCAT": invalid identifier.任何人都可以验证这确实是由于XE缺少此(未记录)功能造成的吗?如果是这样,是否有必要在XE中启用它?

When I try to use WMSYS.WM_CONCAT with Oracle XE 10g, I receive a compilation error: ORA-00904: "WMSYS"."WM_CONCAT": invalid identifier. Can anyone verify that this is indeed due to XE lacking this (undocumented) feature? If so, is there anyway to enable it in XE?

推荐答案

建议不要使用 WM_CONCAT ,因为它是未记录的功能,并且已从12c版本中删除.请参见 为什么不使用WM_CONCAT在Oracle中发挥作用?

It is recommended not to use WM_CONCAT since it is an undocumented feature and it has been removed from 12c version. See Why not use WM_CONCAT function in Oracle?

如果您使用的是 11gR2 及更高版本,请使用 LISTAGG .

If you are on 11gR2 and up, use LISTAGG.

对于版本 11g之前的版本(其中不支持LISTAGG),可以使用 ROW_NUMBER() SYS_CONNECT_BY_PATH 函数.

For version prior to 11g where LISTAGG is not supported, you could use ROW_NUMBER() and SYS_CONNECT_BY_PATH functions.

例如,

SELECT deptno,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(ename,','))
       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS employees
FROM   (SELECT deptno,
               ename,
               ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY ename) AS curr,
               ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY ename) -1 AS prev
        FROM   emp)
GROUP BY deptno
CONNECT BY prev = PRIOR curr AND deptno = PRIOR deptno
START WITH curr = 1;

    DEPTNO EMPLOYEES
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 ADAMS,FORD,JONES,SCOTT,SMITH
        30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD

3 rows selected.

这篇关于结合使用WMSYS.WM_CONCAT和Oracle XE 10g的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆