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.