ORA-01489: 字符串连接的结果过长

[复制链接]
查看11 | 回复5 | 2010-9-14 17:25:29 | 显示全部楼层 |阅读模式
CREATE TABLE t_row_str(
ID INT,
col VARCHAR2(10));
INSERT INTO t_row_str VALUES(1,'a');
INSERT INTO t_row_str VALUES(1,'b');
INSERT INTO t_row_str VALUES(1,'c');
INSERT INTO t_row_str VALUES(2,'a');
INSERT INTO t_row_str VALUES(2,'d');
INSERT INTO t_row_str VALUES(2,'e');
INSERT INTO t_row_str VALUES(3,'c');
COMMIT;
SELECT * FROM t_row_str;

SELECT t.id id, substr(sys_connect_by_path(t.col, ','), 2) str
FROM (SELECT id, col, row_number() over(PARTITION BY id ORDER BY col) rn
FROM t_row_str) t
WHERE connect_by_isleaf = 1
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1
AND id = PRIOR id;

当我执行这个语句会报错,ORA-01489: 字符串连接的结果过长

因为substr(sys_connect_by_path(t.col, ','), 2) str字段 我的查询结果有上万个汉字,所以无法处理。

考虑将col转换成clob,小数据量没有问题,当将所有数据都放进去的时候就报错了!ORA-01489: 字符串连接的结果过长

问下有没有解决方法!谢谢!


回复

使用道具 举报

千问 | 2010-9-14 17:25:29 | 显示全部楼层
分步做
WHERE rn1000 and rn select gcol,
2 sumvar(cast(multiset(select '/'||val
3
from tb_agg
4
where a.gcol=gcol
5
order by val) as vars
6
)
7
) as aggr
8from tb_agg a
9 group by gcol
10/
GCOL AGGR
-------- ----------------------------------------
1/01/02/03/04/05
2/06/07/08/09/10
3/11/12/13/14/15
4/16/17/18/19/20
---------
[/php]
[ 本帖最后由 jackywood 于 2009-9-17 16:29 编辑 ]
回复

使用道具 举报

千问 | 2010-9-14 17:25:29 | 显示全部楼层
补一个以前帖子的链接
http://www.itpub.net/477803.html
希望对你解决实际问题有用


回复

使用道具 举报

千问 | 2010-9-14 17:25:29 | 显示全部楼层
太实际了!老大!谢谢!
回复

使用道具 举报

千问 | 2010-9-14 17:25:29 | 显示全部楼层
nice
回复

使用道具 举报

千问 | 2010-9-14 17:25:29 | 显示全部楼层
牛人呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行