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.