吐槽: 客户总有变态需求,也不知道系统是给他们垒文字的平台还是怎么, 一个字段文本输入4000字以上(软件初期未预计有这么大的文字量,未使用clob进行存储),困扰半小时,鉴于此,给出解决方案,给遇到同样问题的人快速解决方案。
先贴出原sql
select pubbj002,
pubbk002,
pubcb002,
trunc(SERBA004),
trunc(SERBA030),
trunc(SERBA030) - trunc(SERBA004) + 1,
sercc002,
pubia002,
decode(serba037, '0', '营业状态', '1', '撤场状态'),
decode(SERBA024, '1', '低', '2', '中', '3', '高'),
'',
decode(SERBA039, '1', '顾客', '2', '商场', '3', '商户'),
decode(SERBA040, '1', '售前', '2', '售中', '3', '售后'),
SERMF004,
SERBA007,
-- 我改写部分
dbms_lob.substr(rtrim(xmlagg(xmlparse(content serbj004 || ',' wellformed) ORDER BY serbj004).getclobval(),','),2000) ||
--wmsys.wm_concat(serbj004) ||
nvl2(serba027, ' 处理结果描述:' || serba027, serba027) serbj004,
pubhb002,
serba023,
salbi052,
serba009,
'',
serba012,
PUBCD006,
pubcd003,
'',
nvl2(serba031, serba032, serba031)
from tb_serba
left join tb_pubcb on pubcb_id = serba006
left join tb_pubbj on pubbj_id = pubcb038
left join tb_pubbk on pubbk_id = pubcb039
left join tb_salbh on salbh_id = serba022
left join (select salbi001, sum(salbi052) salbi052
from tb_salbi
group by salbi001) on salbi001 = salbh_id
left join tb_pubcd on pubcd_id = serba036
left join tb_serbj on serbj001 = serba_id
left join tb_sercc on sercc_id = serba003
left join tb_pubhb on pubhb_id = serba017
left join tb_pubic on pubic_id = serba018
left join tb_pubib on pubib_id = pubic003
left join tb_pubia on pubia_id = pubib003
left join tb_sermf on sermf_id = serba041
where 1 = 1
and (pubcb_id in
(131, 133, 134, 135, 138, 139, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242))
and trunc(serba004) between to_date('2015-04-01', 'yyyy-mm-dd') and
to_date('2015-04-27', 'yyyy-mm-dd')
and nvl(serba028, '2') = '2'
group by pubbj002,
pubbk002,
pubcb002,
SERBA004,
SERBA030,
SALBH024,
sercc002,
pubia002,
serba037,
SERBA024,
SERBA039,
SERBA040,
pubhb002,
serba023,
salbi052,
serba009,
PUBCD006,
SERBA007,
pubcd003,
SERMF004,
serba012,
serba027,
serba031,
serba032
order by serba004
在进行使用WM_CONCAT或者自定义的聚合函数,进行拼串的时候,可能遇到拼串形成的结果集大于4000,这时候,系统会提示,超过系统限制。所以,在这个时候,最好的处理办法就是将结果集处理成CLOB格式,
下面共有两种处理方式:
1、使用函数