我想按如下方式使用listagg函数,但得到ORA-01489:字符串连接的结果太长。“ORA-01489:字符串连接的结果太长”(字符串很小)
SELECT LOCATIONID, LISTAGG(TO_CHAR(XPOSITION||','||YPOSITION), ',') WITHIN GROUP (ORDER BY SEQUENCENUMBER) ords
FROM POSITIONPOINTS
GROUP BY LOCATIONID
HAVING COUNT(SEQUENCENUMBER) = 20;
当我尝试在Oracle Sql Developer中运行它时,它显示前1550行,然后报告ORA-01489错误。总共应该返回2612行,所有的ords值长度大约为440个字符。该SQL开发正在返回的行中的一个的一个例子是:
22372682 410434.801,551142.885,410434.784,551142.875,410439.801,551141.922,410439.991,551141.795,410439.293,551138.303,410438.531,551137.668,410429.768,551134.302,410427.228,551133.159 ,410426.212,551132.143,410425.196,551129.667,410421.957,551114.3,410414.972,551081.28,410413.639,551076.136,410412.94,551073.66,410412.94,551072.326,410413.639,551071.628,410415.798,551070.612,410416.369,551069.469,410416.877,551068.834,410433.23,551061.795
PositionPoints表中有一些LocationIDs有超过20个条目(最大值为254),对于这些行我期望连接字符串大于4000个字符的最大值。但是,在count(sequencenumber)= 20的情况下,连接的字符串长度将小于500.即使我用HAVING子句排除的位置,Oracle是否执行连接,并报告这些错误?
我试过从Oracle Sql Developer和SQL Plus运行查询。
如果有人能解决这个问题,请大家感激。
感谢