sql >> Databáze >  >> RDS >> Oracle

Při používání XMLAgg/XMLElement došlo k příliš malé chybě vyrovnávací paměti

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.




  1. Úvod do údržby záznamů

  2. PostgreSQL - Instalace ovladače JDBC

  3. SQL Server:K čemu jsou dávkové příkazy (tj. pomocí GO) dobré?

  4. Jak změnit heslo root mysql