This is my example data:
CREATE TABLE xml_test (
xml_col XMLTYPE NOT NULL);
/* */
INSERT INTO xml_test VALUES (XMLTYPE('<ns1:SomeRootNode xmlns="http://www.exampleurl.com" xmlns:ns1="http://www.someotherurl.com">
<ns1:SomeParentNode>
<ns1:SomeRepeatingNode>
<ns1:SomeDataNode>12345</ns1:SomeDataNode>
</ns1:SomeRepeatingNode>
<ns1:SomeRepeatingNode>
<ns1:SomeDataNode>23456</ns1:SomeDataNode>
</ns1:SomeRepeatingNode>
<ns1:SomeRepeatingNode>
<ns1:SomeDataNode>12345</ns1:SomeDataNode>
</ns1:SomeRepeatingNode>
<ns1:SomeRepeatingNode>
<ns1:SomeDataNode>23456</ns1:SomeDataNode>
</ns1:SomeRepeatingNode>
<ns1:SomeRepeatingNode>
<ns1:SomeDataNode>12345</ns1:SomeDataNode>
</ns1:SomeRepeatingNode>
</ns1:SomeParentNode>
</ns1:SomeRootNode>'));
COMMIT;
This works perfectly fine:
SELECT b.*
FROM xml_test a,
XMLTABLE('//*:SomeDataNode'
PASSING(a.xml_col)
COLUMNS
data_value NUMBER(6) PATH '.') b
|DATA_VALUE|
|----------|
|12345 |
|23456 |
|12345 |
|23456 |
|12345 |
But this throws an ORA-00979 error:
SELECT data_value,
count(*)
FROM (
SELECT b.*
FROM xml_test a,
XMLTABLE('//*:SomeDataNode'
PASSING(a.xml_col)
COLUMNS
data_value NUMBER(6) PATH '.') b)
GROUP BY data_value
I can't see anything obviously wrong here (but I have been looking at it for a while so may be missing something obvious). Any ideas why I'm getting an error?
It looks correct to me too and it works in 23.9:
select banner_full from v$version;
BANNER_FULL
-----------------------------------------------------------------------------------------------------------
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for FreeVersion 23.9.0.25.07
SELECT data_value,
count(*)
FROM (
SELECT b.*
FROM xml_test a,
XMLTABLE('//*:SomeDataNode'
PASSING(a.xml_col)
COLUMNS
data_value NUMBER(6) PATH '.') b)
GROUP BY data_value;
DATA_VALUE COUNT(*)
---------- ----------
12345 3
23456 2
So this looks like a bug; reach out to support to see about getting a backport.