De aggregatie is niet het probleem; de fout komt wanneer je probeert de afsluitende komma die je overhoudt weg te knippen.
U krijgt een impliciete conversie van uw XMLAgg-resultaat, dat een XMLType-object is, naar varchar2; en wanneer de lengte de 4000 tekens overschrijdt, krijgt u deze foutmelding omdat dat de maximale lengte is van een varchar2-waarde in SQL (tenminste, tot Oracle 12c).
U moet de waarde expliciet als een CLOB ophalen voordat u rtrim()
. aanroept , met behulp van 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' );
U kunt ook uw eigen verzamelfunctie
definiëren die een CLOB kan retourneren en meer dan 4000 tekens kan verwerken; dat zou dan meer als listagg()
. kunnen heten , zonder de XML-oplossing.