有很多人问关于新版本中WMSYS.WM_CONCAT函数无法使用的问题。 对于该函数,Oracle官方的态度是其从来没有将该函数列入任何官方文档中,这个函数仅仅是让Oracle Dev研发在针对内部对象例如SYS的存储过程、字典表等使用的,并没有鼓励普通的应用开发者去使用该
有很多人问关于新版本中WMSYS.WM_CONCAT函数无法使用的问题。
对于该函数,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:
Oracle? Database SQL Language Reference 11g?Release 2 (11.2)
Oracle? Database SQL Language Reference 12c?Release 1 (12.1)
但国内的一些朋友肯定还会坚持要在11.2中使用WMSYS.WM_CONCAT,这里提供一种workaround,自己用source来创建WMSYS.WM_CONCAT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | SQL>? 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
SQL>? 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.
#http:
#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.
|
Nach dem Login kopieren
Related posts:
- Oracle用户密码使用特殊符号,例如&(AND)、$(Dollar)、#(Pound)、*(Star)等