Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Buffer error terlalu kecil saat menggunakan XMLAgg/XMLElement

Agregasi bukanlah masalahnya; kesalahan akan muncul saat Anda mencoba menghilangkan tanda koma yang tersisa.

Anda mendapatkan konversi implisit dari hasil XMLAgg Anda, yang merupakan objek XMLType, ke varchar2; dan ketika panjangnya melebihi 4000 karakter, Anda akan mendapatkan kesalahan ini karena itu adalah panjang maksimum nilai varchar2 dalam SQL (setidaknya, hingga Oracle 12c).

Anda perlu mendapatkan nilai secara eksplisit sebagai CLOB sebelum memanggil rtrim() , menggunakan 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' );

Anda juga dapat menentukan fungsi agregat Anda sendiri yang dapat mengembalikan CLOB dan menangani lebih dari 4000 karakter; yang kemudian bisa disebut lebih seperti listagg() , tanpa solusi 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. Pembaruan Pemicu Oracle di Tabel Lain

  2. Bagaimana menghubungkan Oracle Database ke proyek Visual Studio C#

  3. OracleConnection melempar pengecualian kosong

  4. Butuh bantuan untuk mendorong nilai kolom 8k dari R ke kolom CLOB (Oracle)

  5. Tipe data Oracle Number ke format datetime