wmsys.wm_concat 在函数实现字段合并的时候会有长度限制的问题,在schema级下varchar2最大是4000。
比如我想拼接一个合同编号
select wm_concat(htcm.hc_contract_no) from ht_contract_mgr htcm
因为合同数量太多,合同编号又是varchar2类型,报错:
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ORA-06512: 在 "WMSYS.WM_CONCAT_IMPL", line 30
经过一番百度后,得知可以用XML函数解决
得到xmltype不好解析,可以先转成clob类型的,再用程序解析
XMLAGG(XMLELEMENT(E, htcm.hc_contract_no || ',')).EXTRACT('//text()').getclobval()
最终结果还会多出个逗号,要自己处理一下。