解决oracle 12c中wm_concat函数无效问题

原创 2018年04月15日 13:39:31
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  
);  
/  
  
--定义类型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,  
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;  
/  
--自定义行变列函数:  
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  
/  

在12C上创建wm_concat函数

11gr2和12C上已经摒弃了wm_concat函数,当时我们很多程序员在程序中确使用了该函数,导致程序出现错误,为了减轻程序员修改程序的工作量,只有通过手工创建个wm_concat函数,来临时解决该...
  • wenzhongyan
  • wenzhongyan
  • 2015-01-26 11:34:12
  • 11194

oracle12中无法使用wm_concat解决

使用新的函数代替listagg(合并字段,'连接符号') within group (order by 排序字段)但是这样使用如果内容多的话会报错‘返回的结果过长’,所以需要使用方法将其转换为glob...
  • chenyidong521
  • chenyidong521
  • 2017-12-27 16:17:11
  • 346

Oracle 11g 重建WMSYS用户的WMSYS.WM_CONCAT函数

当无此用户(WMSYS) 就会报错 ,没有WMSYS.WM_CONCAT方法: 解决办法: 1.下载 需要的文件 owmctab.plb  owmaggrs.plb      owmaggrb.p...
  • huaishuming
  • huaishuming
  • 2014-12-04 16:51:49
  • 12000

在oracle12C上创建wm_concat函数

11gr2和12C上已经摒弃了wm_concat函数,当时我们很多程序员在程序中确使用了该函数,导致程序出现错误,为了减轻程序员修改程序的工作量,只有通过手工创建个wm_concat函数,来临时解决该...
  • qinhGG
  • qinhGG
  • 2017-05-02 11:27:26
  • 1490

oracle 替换wmsys.wm_concat的函数

本文转自:http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php
  • daxiang12092205
  • daxiang12092205
  • 2014-05-25 12:01:40
  • 4366

"SYS"."WM_CONCAT": 标识符无效

运行project后后台报错: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar...
  • sweetgirl520
  • sweetgirl520
  • 2016-04-29 15:44:37
  • 5707

关于oracle中的wmsys.wm_concat中的使用问题

这两天在项目中遇到了一个问题,就是系统中使用了wmsys.wm_concat引发的相关问题,PM也提议不要使用,原因有下: 1.该函数不是oracle公开的系统函数,它的用户是wmsys,而不是sy...
  • pengdingxu10
  • pengdingxu10
  • 2015-06-10 10:06:55
  • 4467

在Oracle 上补充创建wm_concat函数

Oracle 11gR2和12C上已经摒弃了wm_concat函数,当时我们很多程序员在程序中确使用了该函数,导致程序出现错误,为了减轻程序员修改程序的工作量,只有通过手工创建个wm_concat函数...
  • dantegarden
  • dantegarden
  • 2017-02-23 08:55:09
  • 2015

oracle中使用wm_concat函数的方法及弊端(解决办法)

该函数在10版本推出,可以把列值以英文逗号分隔起来并显示成一行,例子: 1.   SQL> create table test(id number,name varchar2(20));   2. ...
  • u012027874
  • u012027874
  • 2017-11-11 11:32:40
  • 2180

Oracle 10g 解决wm_concat函数超过4000报错问题

转:http://blog.itpub.net/28998293/viewspace-1353103/ Oracle 10g版本的wm_concat为varchar2(4000),在使用wm_con...
  • lt53130640688
  • lt53130640688
  • 2015-11-11 17:13:27
  • 543
收藏助手
不良信息举报
您举报文章:解决oracle 12c中wm_concat函数无效问题
举报原因:
原因补充:

(最多只允许输入30个字)