.getClobVal()
を追加する必要があります RTRIMの前のXMLType結果に。
XMLAGGは、大量のデータで正常に機能します。また、TRIMはCLOBで正常に機能します。ただし、これらを組み合わせると、OracleはXMLTypeをCLOBではなくVARCHAR2に変換しようとします。
例:
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;