wm_concat 操作数值超出系统的限制

sn_tiantian 2011-05-18 09:42:47
在网上查了一下,说是wm_concat最大长度为30K,有没有好的解决方案呢?
...全文
3999 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgcmmail 2011-09-23
  • 打赏
  • 举报
回复
我也遇到同样问题,想了个办法,横向差分超长的字符串,需要拆多长根据字符串最大长度决定。
先估算wm_concat(item)中多少个item会超长,以100为例,套一层子查询,里边用分析函数row_number,在外边用
wm_concat(case when ro <= 100 then item end) item1,
wm_concat(case when ro > 100 and ro<200 then item end) item2,
。。。
应该可以满足一些需求了。

sn_tiantian 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tangren 的回复:]

1、WM_CONCAT本身限制,并且如果字符串太长太多,拼接会很慢,没有效率。
2、如果要拼接更长的,可以自定义一个聚合函数试试。
[/Quote]

我也自定义了一个拼接函数,使用clob作为存储对象。可是后面又引发一系列的问题。因为我后面还要对个拼接后的字符串做一些操作。如max,substr等等。而clob根本不支持这些操作。也想到把clob转为varchar2类型,可是varchar2最大长度是4000。

真是烦啊。
tangren 2011-05-18
  • 打赏
  • 举报
回复
1、WM_CONCAT本身限制,并且如果字符串太长太多,拼接会很慢,没有效率。
2、如果要拼接更长的,可以自定义一个聚合函数试试。
huangdh12 2011-05-18
  • 打赏
  • 举报
回复
超过4000 那要以clob方式展现。也比较麻烦了。
cnham 2011-05-18
  • 打赏
  • 举报
回复
最好不要直接用wm_concat
这个函数有的时候不能用
可以自定义
具体可以参照:http://blog.csdn.net/cnham/archive/2011/02/25/6206759.aspx

17,378

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧