Agregace není problém; chyba nastává, když se pokusíte oříznout koncovou čárku, která vám zbyla.
Získáváte implicitní konverzi vašeho výsledku XMLAgg, což je objekt XMLType, na varchar2; a když jeho délka přesáhne 4000 znaků, dostanete tuto chybu, protože to je maximální délka hodnoty varchar2 v SQL (alespoň do Oracle 12c).
Před voláním rtrim()
musíte explicitně získat hodnotu jako CLOB pomocí 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' );
Můžete také definovat svou vlastní agregační funkci
který může vrátit CLOB a zpracovat více než 4000 znaků; to by se pak dalo nazvat spíš jako listagg()
, bez řešení XML.