कभी भी WM_CONCAT
का उपयोग न करें . पढ़ें WM_CONCAT फ़ंक्शन का उपयोग क्यों न करें Oracle में?
यह विषय देखें https://stackoverflow.com/a/28758117/3989608 ।
यह अनिर्दिष्ट है, और कोई भी एप्लिकेशन जो WM_CONCAT
. पर निर्भर करता है 12c
. में अपग्रेड करने के बाद काम नहीं करेगा क्योंकि इसे नवीनतम 12c संस्करण से हटा दिया गया है।
स्ट्रिंग-एकत्रीकरण करने के कई तरीके हैं , डेटाबेस संस्करण . के आधार पर . नीचे कुछ उदाहरण देखें:
11gR2
LIASTAGG
का उपयोग करें :
SQL> SELECT grp,
2 listagg(command, ',') WITHIN GROUP(
3 ORDER BY seq) command
4 FROM t
5 GROUP BY grp;
GRP COMMAND
--- --------------------------------------------------------------------------------------------
ONE <?xml version=1.0 encoding=UTF-8?>,<message1>MESSAGE</message1>,<message2>MESSAGE</message2>
TWO <?xml version=1.0 encoding=UTF-8?>,<message2>MESSAGE</message2>,<message9>MESSAGE</message9>
SQL>
9i और ऊपर
ROW_NUMBER()
का उपयोग करें और SYS_CONNECT_BY_PATH
:
SQL> SELECT grp,
2 LTRIM(MAX(SYS_CONNECT_BY_PATH(command,','))
3 KEEP (DENSE_RANK LAST ORDER BY seq),',') command
4 FROM (SELECT grp,
5 command,
6 seq,
7 ROW_NUMBER() OVER (PARTITION BY grp ORDER BY seq) AS curr,
8 ROW_NUMBER() OVER (PARTITION BY grp ORDER BY seq) -1 AS prev
9 FROM t)
10 GROUP BY grp
11 CONNECT BY prev = PRIOR curr AND grp = PRIOR grp
12 START WITH curr = 1;
GRP COMMAND
--- --------------------------------------------------------------------------------------------
ONE <?xml version=1.0 encoding=UTF-8?>,<message1>MESSAGE</message1>,<message2>MESSAGE</message2>
TWO <?xml version=1.0 encoding=UTF-8?>,<message2>MESSAGE</message2>,<message9>MESSAGE</message9>
SQL>