concat()
एसक्यूएल फ़ंक्शन दो मानों को जोड़ता है, इसलिए यह अर्धविराम को प्रत्येक निकाले गए मान में स्वतंत्र रूप से जोड़ रहा है। लेकिन आप वास्तव में परिणामों का स्ट्रिंग एकत्रीकरण करने की कोशिश कर रहे हैं (जो, संभवतः, वास्तव में दो से अधिक निकाले गए मान हो सकते हैं)।
आप निकालने के बजाय XMLQuery का उपयोग कर सकते हैं, और एक XPath string-join()
. का उपयोग कर सकते हैं संयोजन करने के लिए कार्य करें:
XMLQuery('string-join(/A/B, ";")' passing xmltype(a.xml) returning content)
निश्चित एक्सएमएल एंड-नोड टैग के साथ डेमो:
-- CTE for sample data
with a (xml) as (
select '<A><B>123</B><C>456</C><B>789</B></A>' from dual
)
-- actual query
select XMLQuery('string-join(/A/B, ";")' passing xmltype(a.xml) returning content) as result
from a;
RESULT
------------------------------
123;789
आप सभी व्यक्तियों को भी निकाल सकते हैं <B>
XMLTable का उपयोग करके मान, और फिर SQL-स्तरीय एकत्रीकरण का उपयोग करें:
-- CTE for sample data
with a (xml) as (
select '<A><B>123</B><C>456</C><B>789</B></A>' from dual
)
-- actual query
select listagg(x.b, ';') within group (order by null) as result
from a
cross join XMLTable('/A/B' passing xmltype(a.xml) columns b number path '.') x;
RESULT
------------------------------
123;789
जो आपको अधिक लचीलापन देता है और अन्य नोड मानों के आधार पर अधिक आसानी से समूहित करने की अनुमति देता है, लेकिन आपके उदाहरण मान के आधार पर यहां इसकी आवश्यकता प्रतीत नहीं होती है।