您的位置:首页 > 数据库 > Oracle

Oracle 自定义wmsys.wm_concat 避免长度限制

2016-09-06 14:43 211 查看
Oracle 自定义wmsys.wm_concat 避免长度限制 网上搜索到这段类似代码但是长度过程还是不行,经过我的修改,亲测可以。

CREATE OR REPLACE TYPE ZH_CONCAT_IM

AUTHID CURRENT_USER AS OBJECT

(

CURR_STR CLOB,

STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT ZH_CONCAT_IM) RETURN NUMBER,

MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT ZH_CONCAT_IM,

P1 IN VARCHAR2) RETURN NUMBER,

MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN ZH_CONCAT_IM,

RETURNVALUE OUT CLOB,

FLAGS IN NUMBER)

RETURN NUMBER,

MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT ZH_CONCAT_IM,

SCTX2 IN ZH_CONCAT_IM) RETURN NUMBER

)

GO

CREATE OR REPLACE TYPE BODY ZH_CONCAT_IM

IS

STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT ZH_CONCAT_IM)

RETURN NUMBER

IS

BEGIN

SCTX := ZH_CONCAT_IM(NULL) ;

RETURN ODCICONST.SUCCESS;

END;

MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT ZH_CONCAT_IM,

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 ZH_CONCAT_IM,

RETURNVALUE OUT CLOB,

FLAGS IN NUMBER)

RETURN NUMBER

IS

BEGIN

RETURNVALUE := CURR_STR ;

RETURN ODCICONST.SUCCESS;

END;

MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT ZH_CONCAT_IM,

SCTX2 IN ZH_CONCAT_IM)

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;

GO

CREATE OR REPLACE FUNCTION ZH_CONCAT(P1 VARCHAR2)

RETURN CLOB AGGREGATE USING ZH_CONCAT_IM ;

或则 嫌写自定义函数太麻烦,用xmlagg就可以了,支持返回clob 和string类型

select rtrim(xmlagg(xmlparse(content l||',' wellformed)) .getclobval() ,',') /* .getstringval()*/ from

(select level as l from dual connect by level<=5000)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息