加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 16:01:27 所属栏目:百科 来源:网络整理
导读:Oracle自定义wmsys.wm_concat避免长度限制网上搜索到这段类似代码但是长度过程还是不行,经过我的修改,亲测可以。 CREATEORREPLACETYPEZH_CONCAT_IM AUTHIDCURRENT_USERASOBJECT ( CURR_STRCLOB, STATICFUNCTIONODCIAGGREGATEINITIALIZE(SCTXINOUTZH_CONCAT


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

CREATEORREPLACETYPEZH_CONCAT_IM
AUTHIDCURRENT_USERASOBJECT
(
CURR_STRCLOB,
STATICFUNCTIONODCIAGGREGATEINITIALIZE(SCTXINOUTZH_CONCAT_IM)RETURNNUMBER,
MEMBERFUNCTIONODCIAGGREGATEITERATE(SELFINOUTZH_CONCAT_IM,
P1INVARCHAR2)RETURNNUMBER,
MEMBERFUNCTIONODCIAGGREGATETERMINATE(SELFINZH_CONCAT_IM,
RETURNVALUEOUTCLOB,
FLAGSINNUMBER)
RETURNNUMBER,
MEMBERFUNCTIONODCIAGGREGATEMERGE(SELFINOUTZH_CONCAT_IM,
SCTX2INZH_CONCAT_IM)RETURNNUMBER
)
GO

CREATEORREPLACETYPEBODYZH_CONCAT_IM
IS
STATICFUNCTIONODCIAGGREGATEINITIALIZE(SCTXINOUTZH_CONCAT_IM)
RETURNNUMBER
IS
BEGIN
SCTX:=ZH_CONCAT_IM(NULL);
RETURNODCICONST.SUCCESS;
END;
MEMBERFUNCTIONODCIAGGREGATEITERATE(SELFINOUTZH_CONCAT_IM,
P1INVARCHAR2)
RETURNNUMBER
IS
BEGIN
IF(CURR_STRISNOTNULL)THEN
CURR_STR:=CURR_STR||','||P1;
ELSE
CURR_STR:=P1;
ENDIF;
RETURNODCICONST.SUCCESS;
END;
MEMBERFUNCTIONODCIAGGREGATETERMINATE(SELFINZH_CONCAT_IM,
FLAGSINNUMBER)
RETURNNUMBER
IS
BEGIN
RETURNVALUE:=CURR_STR;
RETURNODCICONST.SUCCESS;
END;
MEMBERFUNCTIONODCIAGGREGATEMERGE(SELFINOUTZH_CONCAT_IM,
SCTX2INZH_CONCAT_IM)
RETURNNUMBER
IS
BEGIN
IF(SCTX2.CURR_STRISNOTNULL)THEN
SELF.CURR_STR:=SELF.CURR_STR||','||SCTX2.CURR_STR;
ENDIF;
RETURNODCICONST.SUCCESS;
END;
END;
GO
CREATEORREPLACEFUNCTIONZH_CONCAT(P1VARCHAR2)

RETURNCLOBAGGREGATEUSINGZH_CONCAT_IM;


或则 嫌写自定义函数太麻烦,用xmlagg就可以了,支持返回clob和string类型 selectrtrim(xmlagg(xmlparse(contentl||','wellformed)).getclobval(),',')/*.getstringval()*/from (selectlevelaslfromdualconnectbylevel<=5000)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读