oracle12c
取消
wm_concat
函数,如何重建或使用替代方案
1
、问题描述
wm_concat
函数是
oracle
的非公开函数,在新版的
oracle
中不支持该函数。虽然其不支持,但是为了方便统计
数据,我们是可以重新创建该函数的,或者,我们也可以使用其替代函数,
listagg
,下面我们就这两种方式分别
写出对应解决方案
2
、解决方案
2.1
创建
wm_concat
函数
--
首先使用
dba
账号登录
oracle
数据库
--
解锁
wmsys
用户
alter user wmsys account unlock;
--
并为
wmsys
用户授权,可根据需要授权,不建议授权所有权限
grant all privileges to wmsys;
--
如果不知道
wmsys
用户的密码,可以修改其密码
alter user wmsys identied by 123456;
--
使用
wmsys
用户登录数据库
conn wmsys/123456
--
在
wmsys
下创建可用的
wm_concat
函数,直接执行以下语句
--
定义类型
CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT
(
CURR_STR VARCHAR2(32767),
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,
P1 IN VARCHAR2) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,
RETURNVALUE OUT VARCHAR2,
FLAGS IN NUMBER)
RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,
SCTX2 IN WM_CONCAT_IMPL) RETURN NUMBER
);
/
--
定义类型
body:
CREATE OR REPLACE TYPE BODY WM_CONCAT_IMPL
IS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL)
RETURN NUMBER
IS
BEGIN
SCTX := WM_CONCAT_IMPL(NULL) ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,
评论