I do not understand why this query does not work.
Original query working on 3x servers.
SELECT (
SELECT to_char(RTRIM(XMLAGG(XMLELEMENT(e, TEXT, ',').EXTRACT('//text()')).GetClobVal(), ',')) CM_LINES
FROM (
SELECT DISTINCT to_char(cmline) TEXT
FROM CCP.comms_matrix_data
WHERE comms_matrix_id = :pkid
AND src_net = t1.SRC_NET
AND dst_net = t1.DST_NET
ORDER BY cmline
)
) CM_LINES
,t1.SRC_NET
,t1.DST_NET
,t1.SRC_NETZONE
,t1.DST_NETZONE
,t1.RPA
,t1.RPN
FROM CCP.comms_matrix_data t1
WHERE (t1.COMMS_MATRIX_ID = :pkid)
AND (LOWER(t1.STATUS) LIKE '%implement%')
GROUP BY t1.SRC_NET
,t1.DST_NET
,t1.SRC_NETZONE
,t1.DST_NETZONE
,t1.RPA
,t1.RPN
On dev server this errors with ORA-00904: "T1"."DST_NET": invalid identifier 00904. 00000 - "%s: invalid identifier"
on my dev server it does not work so I decided to rewrite the query to:
SELECT CM_LINES.CM_LINES
,t1.SRC_NET
,t1.DST_NET
,t1.SRC_NETZONE
,t1.DST_NETZONE
,t1.RPA
,t1.RPN
FROM CCP.comms_matrix_data t1,
(
SELECT to_char(RTRIM(XMLAGG(XMLELEMENT(e, TEXT, ',').EXTRACT('//text()')).GetClobVal(), ',')) CM_LINES, src_net, dst_net
FROM (
SELECT DISTINCT to_char(cmline) TEXT, src_net, dst_net
FROM CCP.comms_matrix_data
WHERE comms_matrix_id = :pkid
ORDER BY cmline
)
) CM_LINES
WHERE (t1.COMMS_MATRIX_ID = :pkid)
AND (LOWER(t1.STATUS) LIKE '%implement%')
AND CM_LINES.src_net = t1.SRC_NET
AND CM_LINES.dst_net = t1.DST_NET
GROUP BY CM_LINES.CM_LINES
,t1.SRC_NET
,t1.DST_NET
,t1.SRC_NETZONE
,t1.DST_NETZONE
,t1.RPA
,t1.RPN;
on dev server this errors with ORA-00937: not a single-group group function 00937. 00000 - "not a single-group group function"
@Gordon
UPDATE
SELECT x.CM_LINES
,t1.SRC_NET
,t1.DST_NET
,t1.SRC_NETZONE
,t1.DST_NETZONE
,t1.RPA
,t1.RPN
FROM CCP.comms_matrix_data t1
JOIN (
SELECT to_char(RTRIM(XMLAGG(XMLELEMENT(e, cml.TEXT, ',').EXTRACT('//text()')).GetClobVal(), ',')) CM_LINES
,src_net
,dst_net
FROM (
SELECT DISTINCT to_char(cmline) TEXT
,src_net
,dst_net
FROM CCP.comms_matrix_data
WHERE comms_matrix_id = :pkid
ORDER BY cmline
) cml ON cml.src_net = t1.SRC_NET /* sql developer reports problem here*/
AND cml.dst_net = t1.DST_NET
WHERE t1.COMMS_MATRIX_ID = :pkid
AND LOWER(t1.STATUS) LIKE '%implement%'
GROUP BY src_net
,dst_net
) x
GROUP BY x.CM_LINES
,t1.SRC_NET
,t1.DST_NET
,t1.SRC_NETZONE
,t1.DST_NETZONE
,t1.RPA
,t1.RPN;
UPDATE 2
If I Try the following i get error on group by ORA-00905: missing keyword 00905. 00000 - "missing keyword"
SELECT x.CM_LINES
,t1.SRC_NET
,t1.DST_NET
,t1.SRC_NETZONE
,t1.DST_NETZONE
,t1.RPA
,t1.RPN
FROM CCP.comms_matrix_data t1
JOIN (
SELECT to_char(RTRIM(XMLAGG(XMLELEMENT(e, cml.TEXT, ',').EXTRACT('//text()')).GetClobVal(), ',')) CM_LINES
,src_net
,dst_net
FROM (
SELECT DISTINCT to_char(cmline) TEXT
,src_net
,dst_net
FROM CCP.comms_matrix_data
WHERE comms_matrix_id = :pkid
ORDER BY cmline
) cml
join cml ON cml.src_net = t1.SRC_NET
AND cml.dst_net = t1.DST_NET
WHERE t1.COMMS_MATRIX_ID = :pkid
AND LOWER(t1.STATUS) LIKE '%implement%'
GROUP BY src_net
,dst_net
) x /* should there not be an on clause here? */
GROUP BY x.CM_LINES /* error here */
,t1.SRC_NET
,t1.DST_NET
,t1.SRC_NETZONE
,t1.DST_NETZONE
,t1.RPA
,t1.RPN;
You need a GROUP BY
in the subquery:
SELECT CM_LINES, t1.SRC_NET, t1.DST_NET,
t1.SRC_NETZONE, t1.DST_NETZONE, t1.RPA, t1.RPN
FROM CCP.comms_matrix_data t1 JOIN
(SELECT to_char(RTRIM(XMLAGG(XMLELEMENT(e, TEXT, ',').EXTRACT('//text()')).GetClobVal(), ',')) as CM_LINES,
src_net, dst_net
FROM (SELECT to_char(cmline) as TEXT, src_net, dst_net,
ROW_NUMBER() OVER (PARTITION BY src_net, dst_net ORDER BY cmline DESC) as seqnum
FROM CCP.comms_matrix_data
WHERE comms_matrix_id = :pkid
) CM_LINES
ON CM_LINES.src_net = t1.SRC_NET AND
CM_LINES.dst_net = t1.DST_NET AND
seqnum = 1
WHERE t1.COMMS_MATRIX_ID = :pkid AND
LOWER(t1.STATUS) LIKE '%implement%'
GROUP BY src_net, dst_net
) x
GROUP BY CM_LINES, t1.SRC_NET, t1.DST_NET
t1.SRC_NETZONE, t1.DST_NETZONE, t1.RPA, t1.RPN;
XMLAGG()
is an aggregation function.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.