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 identified 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 W