创建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;

  • 修改任何文件或文件名,提示无效设备。
  • 大华设备扫描工具实现方法
  • PLSQL记住曾经登录过的用户名和密码
  • linux更新内核update-initramfs出错
  • toad for oracle如何安装
  • 热门搜索
    ps怎么添加文字 宝宝打嗝怎么办 怎么装系统 番茄炒蛋怎么做 冬瓜汤怎么做 书信格式怎么写 dll文件怎么打开 小腿抽筋是怎么回事 外文文献怎么找 宝宝发烧怎么物理降温