sql >> Database teknologi >  >> RDS >> Oracle

Buffer for lille fejl under brug af XMLAgg/XMLElement

Sammenlægningen er ikke problemet; fejlen kommer, når du forsøger at trimme det efterfølgende komma, du sidder tilbage med.

Du får en implicit konvertering af dit XMLAgg-resultat, som er et XMLType-objekt, til varchar2; og når dens længde overstiger 4000 tegn, får du denne fejl, da det er den maksimale længde af en varchar2-værdi i SQL (i det mindste indtil Oracle 12c).

Du skal eksplicit få værdien som en CLOB, før du kalder rtrim() , ved hjælp af 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' );

Du kan også definere din egen aggregerede funktion der kan returnere en CLOB og håndtere mere end 4000 tegn; som så kunne kaldes mere som listagg() uden XML-løsningen.




  1. Sådan genereres 5 tilfældige tal i mysql-lagret procedure

  2. Oracle 11g SQL for at få unikke værdier i én kolonne i en forespørgsel med flere kolonner

  3. hvordan man bruger LIKE med kolonnenavn

  4. Afslappende Api Express postgres-database