次のように listagg 関数を使用しようとしていますが、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 Developer が返す行の 1 つの例は次のとおりです。
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,5510951441414141416951415514155141551415514169550695069506951441616955069514414169550695144141641.
PositionPoints テーブルには、20 を超えるエントリ (最大 254) を持つ LocationID がいくつかあります。これらの行では、連結された文字列が最大 4000 文字を超えると予想されます。ただし、count(sequencenumber) = 20 の場合、連結された文字列の長さは 500 未満になります。Oracle は、HAVING 句で除外した場所に対しても連結を実行し、これらについてエラーを報告していますか?
Oracle Sql Developer と SQL Plus の両方からクエリを実行してみました。
誰かがこの問題に光を当てることができれば幸いです。
ありがとう