Không bao giờ sử dụng WM_CONCAT
. Đọc Tại sao không sử dụng hàm WM_CONCAT trong Oracle?
Xem chủ đề này https://stackoverflow.com/a/28758117/3989608 .
Nó không có giấy tờ và bất kỳ ứng dụng nào dựa trên WM_CONCAT
sẽ không hoạt động sau khi được nâng cấp lên 12c
vì nó đã bị xóa khỏi phiên bản 12c mới nhất.
Có nhiều cách để thực hiện tổng hợp chuỗi , tùy thuộc vào phiên bản cơ sở dữ liệu . Xem một vài ví dụ dưới đây:
11gR2
Sử dụng 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 trở lên
Sử dụng ROW_NUMBER()
và 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>