Oracle
 sql >> Datenbank >  >> RDS >> Oracle

XMLAGG mit RTRIM-Problem

Sie müssen .getClobVal() hinzufügen zu Ihrem XMLType-Ergebnis, vor dem RTRIM.

XMLAGG funktioniert gut mit großen Datenmengen. Und TRIM funktioniert gut mit CLOBs. Aber wenn Sie sie zusammenfügen, versucht Oracle, den XMLType in einen VARCHAR2 statt in einen CLOB umzuwandeln.

Beispiel:

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;