sql >> Database >  >> RDS >> Oracle

XMLAGG met RTRIM-probleem

U moet .getClobVal() . toevoegen naar uw XMLType-resultaat, vóór de RTRIM.

XMLAGG werkt prima met grote hoeveelheden data. En TRIM werkt prima met CLOB's. Maar als je ze samenvoegt, probeert Oracle het XMLType om te zetten in een VARCHAR2 in plaats van een CLOB.

Voorbeeld:

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;


  1. Oracle-gegevenstypen

  2. sp_executesql is traag met parameters

  3. Geo-zoeken (afstand) in PHP/MySQL (prestaties)

  4. Voorbeelden van het converteren van 'date' naar 'datetime2' in SQL Server (T-SQL)