Oracle
 sql >> Baza danych >  >> RDS >> Oracle

XMLAGG z problemem RTRIM

Musisz dodać .getClobVal() do wyniku XMLType, przed RTRIM.

XMLAGG działa dobrze z dużymi ilościami danych. A TRIM działa dobrze z CLOBami. Ale kiedy je połączysz, Oracle spróbuje przekonwertować XMLType na VARCHAR2 zamiast na CLOB.

Przykład:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać dostęp do bazy danych Oracle przez sieć?

  2. TRANSLATE(… UŻYWAJĄC) Funkcja w Oracle

  3. Jaka jest różnica między jawnymi i niejawnymi kursorami w Oracle?

  4. Nieuporządkowane wyniki w SQL

  5. Funkcja DBTIMEZONE w Oracle