एकत्रीकरण समस्या नहीं है; त्रुटि तब आ रही है जब आप अपने द्वारा छोड़े गए अनुगामी अल्पविराम को ट्रिम करने का प्रयास करते हैं।
आपको अपने XMLAgg परिणाम का एक अंतर्निहित रूपांतरण मिल रहा है, जो एक XMLType ऑब्जेक्ट है, varchar2 में; और जब इसकी लंबाई 4000 वर्णों से अधिक हो जाती है तो आपको यह त्रुटि मिलेगी क्योंकि यह SQL में varchar2 मान की अधिकतम लंबाई है (कम से कम, Oracle 12c तक)।
rtrim()
. को कॉल करने से पहले आपको स्पष्ट रूप से CLOB के रूप में मान प्राप्त करने की आवश्यकता है , 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' );
आप अपने स्वयं के समग्र कार्य
को भी परिभाषित कर सकते हैं। जो एक CLOB लौटा सकता है और 4000 से अधिक वर्णों को संभाल सकता है; जिसे तब listagg()
. जैसा और अधिक कहा जा सकता है , एक्सएमएल वर्कअराउंड के बिना।