oracle11g ora 00904,【Oracle开发】关于11.2上WMSYS.WM_CONCAT的workaround ORA-00904: “WM_CONCAT”: invalid iden...

01fac6460a22031b8af8da5848698a70.png

有很多人问关于新版本中WMSYS.WM_CONCAT函数无法使用的问题。

ORA-00904: “WM_CONCAT”: invalid identifier

ORA-00904: “WM_CONCAT”: invalid identifier

对于该函数,Oracle官方的态度是其从来没有将该函数列入任何官方文档中,这个函数仅仅是让Oracle Dev研发在针对内部对象例如SYS的存储过程、字典表等使用的,并没有鼓励普通的应用开发者去使用该WMSYS.WM_CONCAT函数,但是由于部分应用开发者发现了这个函数,而且觉得较为好用,所以在应用程序编写过程中大量使用该函数,其结果是由于Oracle对该函数在后续版本中的修改(包括fix、增强)乃至于完全去掉这个函数都是有可能的。

不少人就遇到了这个问题,在新的11.2中没有找到该WMSYS.WM_CONCAT函数,也就意味着其应用程序无法在11.2上正常运行。

这里可以说最初发现这个WMSYS.WM_CONCAT函数的人,即做了一件好事,同时又做了一件坏事。

Oracle官方的态度是在11.2中应当使用 listagg函数而非WMSYS.WM_CONCAT。

关于LISTAGG:

但国内的一些朋友肯定还会坚持要在11.2中使用WMSYS.WM_CONCAT,这里提供一种workaround,自己用source来创建WMSYS.WM_CONCAT

sqlplus / as sysdba

conn / as sysdba

CREATE OR REPLACE

type       WM_CONCAT_IMPL wrapped

a000000

1

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

d

270 160

bg9hz+fBwa888VEZGViHFs/oOP0wg433f64df3QCWE7VehmhTFcUe3y+JrsniV3cSuvmnE3g

Y93dtR+cCsU1N+UQDGbtzhCf2HIdr8lPzfgF2bmCTvmGlHQbTAjTftNrDq3p093ncwb32OyX

3ZFDTeH2jpjm3uWYyT8kZBfJIYxRwgLfRApoW32cpy0eRnvDBt2XfTAMXKCSNnqSoTiGA83W

6deKW+rWyBu9L/EPyFkmQZeBncNsiNDF8fa1Sm6vdQiEanlCQnaPJ11a0na8hK6psDSaey+x

fdMupCwSvg6gMrSV4QCguhOCqW2AmxRVMqpXJootPpTBxBFZc7hORGbriUI=

/

Type created.

#www.askmaclean.com

CREATE OR REPLACE function wm_concat wrapped

a000000

1

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

8

58 96

+CuW1MAfZPVR6NOnXKVmXY2o9pswg8eZgcfLCNL+XhZy8K7/cgzcVrPnfMPnx3TAM7h0ZSXD

j57Asr2ym9ZtFldFmFu+RdpAU8VGORKSvtVG+DmAOR4C+NTa+Pit2kDbEpI5zhZUgqameSkE

DQ==

/

Function created.

#https://www.askmaclean.com/archives/wmsys-wm_concat.html

#www.askmaclean.com

SQL>  select wm_concat(object_id) from sys.user_objects

/

WM_CONCAT(OBJECT_ID)

--------------------------------------------------------------------------------

108674,108672,53144,53147,53150,53151,53162

1 row selected.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值