【Oracle开发】关于11.2上WMSYS.WM_CONCAT的workaround

WBOY
リリース: 2016-06-07 16:37:49
オリジナル
1621 人が閲覧しました

有很多人问关于新版本中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

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/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.
ログイン後にコピー

Related posts:

  1. Oracle用户密码使用特殊符号,例如&(AND)、$(Dollar)、#(Pound)、*(Star)等
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート