Vous devez ajouter .getClobVal()
à votre résultat XMLType, avant le RTRIM.
XMLAGG fonctionne bien avec de grandes quantités de données. Et TRIM fonctionne bien avec les CLOB. Mais lorsque vous les assemblez, Oracle essaie de convertir le XMLType en un VARCHAR2 au lieu d'un CLOB.
Exemple :
create or replace function test_function return clob is
v_clob clob;
begin
v_clob := v_clob || lpad('a', 4000, 'a');
v_clob := v_clob || lpad('b', 4000, 'b');
return v_clob;
end;
/
--Works fine, returns an XMLType
select xmlagg(xmlelement("asdf", test_function)) from dual;
--Works fine, returns a CLOB
select trim(test_function) from dual;
--ORA-19011: Character string buffer too small
select trim(xmlagg(xmlelement("asdf", test_function))) from dual;
--Works
select trim(xmlagg(xmlelement("asdf", test_function)).getClobVal()) from dual;