微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle 自定义wmsys.wm_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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐