sql >> Database >  >> RDS >> Oracle

Buffer te kleine fout tijdens gebruik van XMLAgg/XMLElement

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.




  1. Synchroniseer grote lokale DB met server DB (MySQL)

  2. Stel alle kolommen van een mysql-tabel in op een bepaalde waarde

  3. Controleer of er een tabelkolom in de database bestaat met behulp van SQLAlchemy en Alembic

  4. jOOQ EXTRACT (EPOCH VAN [veld]) oplossing?