Die Aggregation ist nicht das Problem; Der Fehler tritt auf, wenn Sie versuchen, das abschließende Komma abzuschneiden, das übrig bleibt.
Sie erhalten eine implizite Konvertierung Ihres XMLAgg-Ergebnisses, das ein XMLType-Objekt ist, in varchar2; und wenn seine Länge 4000 Zeichen überschreitet, erhalten Sie diesen Fehler, da dies die maximale Länge eines varchar2-Werts in SQL ist (zumindest bis Oracle 12c).
Sie müssen den Wert explizit als CLOB abrufen, bevor Sie rtrim()
aufrufen , mit getclobval()
:
select Rtrim(
(Xmlagg(Xmlelement(e,wonum||',')).extract('//text()')).getclobval(),
',') as wolist
from ( select w.wonum from workorder w
connect by prior w.wonum = w.parent and prior w.siteid = siteid
start with w.siteid = 'ABCD' and w.wonum = 'P1234' );
Sie könnten auch Ihre eigene Aggregatfunktion
definieren die ein CLOB zurückgeben und mehr als 4000 Zeichen verarbeiten kann; das könnte dann eher wie listagg()
aufgerufen werden , ohne die XML-Problemumgehung.