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

Lỗi bộ đệm quá nhỏ khi sử dụng XMLAgg / XMLElement

Tổng hợp không phải là vấn đề; sẽ xảy ra lỗi khi bạn cố gắng cắt bỏ dấu phẩy ở cuối mà bạn còn lại.

Bạn đang nhận được một chuyển đổi ngầm định của kết quả XMLAgg, là một đối tượng XMLType, thành varchar2; và khi độ dài của nó vượt quá 4000 ký tự, bạn sẽ gặp lỗi này vì đó là độ dài tối đa của giá trị varchar2 trong SQL (ít nhất, cho đến Oracle 12c).

Bạn cần nhận rõ ràng giá trị dưới dạng CLOB trước khi gọi rtrim() , sử dụng getclobval() :

select Rtrim(
  (Xmlagg(Xmlelement(e,wonum||',')).extract('//text()')).getclobval(),
    ',') as wolist
from ( select w.wonum from workorder w  
  connect by prior w.wonum = w.parent and prior w.siteid = siteid 
  start with w.siteid =  'ABCD' and w.wonum = 'P1234' );

Bạn cũng có thể xác định hàm tổng hợp của riêng bạn có thể trả về một CLOB và xử lý hơn 4000 ký tự; sau đó có thể được gọi là listagg() , không có giải pháp XML.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hibernate hql - trả về danh sách id các hàng đã cập nhật sau khi thực hiện truy vấn cập nhật

  2. Làm thế nào để xóa trình kích hoạt trong oracle có chứa ký tự đặc biệt?

  3. Làm cách nào để chỉ đếm các giá trị NULL trong Oracle / PLSQL?

  4. Tra cứu LDAP bằng ODP.NET, Managed Driver Beta (Oracle.ManagedDataAccess.dll) không thành công trong ứng dụng C #

  5. khởi động mùa xuân ngủ đông truy vấn lỗi người dùng không hợp lệ