关于wmsys.wm_concat列超出4000处理

吐槽: 客户总有变态需求,也不知道系统是给他们垒文字的平台还是怎么, 一个字段文本输入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、使用函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值