Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

XMLAGG với sự cố RTRIM

Bạn cần thêm .getClobVal() vào kết quả XMLType của bạn, trước RTRIM.

XMLAGG hoạt động tốt với lượng lớn dữ liệu. Và TRIM hoạt động tốt với CLOB. Nhưng khi bạn đặt chúng lại với nhau, Oracle sẽ cố gắng chuyển đổi XMLType thành VARCHAR2 thay vì CLOB.

Ví dụ:

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. Làm thế nào để xác thực số thẻ tín dụng và xác định loại thẻ bằng PL / SQL?

  2. truy xuất nhóm nhiều cột theo liên tục ngày

  3. ORA-01830:hình ảnh định dạng ngày kết thúc trước khi chuyển đổi toàn bộ chuỗi đầu vào / Chọn tổng trong đó truy vấn ngày

  4. Nhóm theo các giá trị theo thứ tự

  5. ORA-01219:cơ sở dữ liệu không mở:chỉ cho phép truy vấn trên các bảng / dạng xem cố định