创建wm_concat函数

时间:2026-02-16 00:29:30

1、一.解锁wmsys用户

alter user wmsys account unlock;

解锁后,如果还是登录不了,可以登录system找到wmsys用户,设置密码和权限

2、二.创建包、包体和函数

以wmsys用户登录数据库,执行下面的命令

CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT  

-- AUTHID CURRENT_USER 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  

);  

3、--定义类型

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,  

P1 IN VARCHAR2)  

RETURN NUMBER  

IS  

BEGIN  

IF(CURR_STR IS NOT NULL) THEN  

CURR_STR := CURR_STR || ',' || P1;  

ELSE  

CURR_STR := P1;  

END IF;  

RETURN ODCICONST.SUCCESS;  

END;  

MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,  

RETURNVALUE OUT VARCHAR2,  

FLAGS IN NUMBER)  

RETURN NUMBER  

IS  

BEGIN  

RETURNVALUE := CURR_STR ;  

RETURN ODCICONST.SUCCESS;  

END;  

MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,  

SCTX2 IN WM_CONCAT_IMPL)  

RETURN NUMBER  

IS  

BEGIN  

IF(SCTX2.CURR_STR IS NOT NULL) THEN  

SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;  

END IF;  

RETURN ODCICONST.SUCCESS;  

END;  

END; 

4、--自定义行变列函数:  

CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2)  

RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL ;  

/

-- 创建同义词并授权

create public synonym WM_CONCAT_IMPL for wmsys.WM_CONCAT_IMPL;

create public synonym wm_concat for wmsys.wm_concat;

grant execute on WM_CONCAT_IMPL to public;

grant execute on wm_concat to public;

© 2026 海能知识库
信息来自网络 所有数据仅供参考
有疑问请联系站长 site.kefu@gmail.com