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() 

最终结果还会多出个逗号,要自己处理一下。

Last modification:May 11, 2018
If you think my article is useful to you, please feel free to appreciate