sql >> Base de Datos >  >> RDS >> Oracle

Error de búfer demasiado pequeño al usar XMLAgg/XMLElement

La agregación no es el problema; el error viene cuando intentas quitar la coma final que te queda.

Obtiene una conversión implícita de su resultado XMLAgg, que es un objeto XMLType, a varchar2; y cuando su longitud supere los 4000 caracteres, obtendrá este error, ya que esa es la longitud máxima de un valor varchar2 en SQL (al menos, hasta Oracle 12c).

Debe obtener explícitamente el valor como CLOB antes de llamar a rtrim() , usando 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' );

También puede definir su propia función agregada que puede devolver un CLOB y manejar más de 4000 caracteres; que luego podría llamarse más como listagg() , sin la solución XML.