以下是示例SQL:
SELECT xml_data.field
FROM
(SELECT sys.XMLType(source_table.data).extract('//source_node/text()') AS field
FROM source_table
)xml_data
GROUP BY to_clob(xml_data.field)
仅当我使用GROUP BY
进行计数时才会出现错误。当它被删除时我得到错误
ORA-22806: not an object or REF
22806. 00000 - "not an object or REF"
*Cause: An attempt was made to extract an attribute from an
item that is neither an object nor a REF.
*Action: Use an object type or REF type item and retry the operation.
Vendor code 22804Error at Line:1
GROUP BY
是否以某种方式改变了子查询中返回的XML字段的类型?或者(很可能)我只是错过了什么?
值得注意的是source_table.data
列是CLOB。
答案 0 :(得分:2)
我看到同样的错误:
SQL> select * from v$version;
BANNER
-------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
我在select语句中重新排列了函数调用,这会导致错误消失。
create table source_table (data clob);
insert into source_table values ('<source_node>test</source_node>');
commit;
select xmltype.getstringval((field).extract('//source_node/text()'))
from
(
select xmltype(data) field
from source_table
)
group by xmltype.getstringval((field).extract('//source_node/text()'))
/
您必须使用((field).extract
...而不是(field.extract...
答案 1 :(得分:1)
SELECT field
FROM (
SELECT SYS.XMLType.getstringval(SYS.XMLType('<source_node>test</source_node>').extract('//source_node/text()')) AS field
FROM dual
) xml_data
GROUP BY
field
答案 2 :(得分:0)
以下在9.2中为我工作
SELECT SYS.XMLType.getstringval(SYS.XMLType('<source_node>test</source_node>').extract('//source_node/text()')) AS field
FROM dual
group by SYS.XMLType.getstringval(SYS.XMLType('<source_node>test</source_node>').extract('//source_node/text()'))
;