Oracle XML 提取方法 - 表别名的要求



我遇到了一个奇怪的问题,查询在表别名上绝对可以正常工作,但在没有表别名时就不能了。

因此,这应该工作:

select a.xml.extract('(//test/@id)[1]').getStringVal() from test_table a;

然而,这不起作用:

select xml.extract('(//test/@id)[1]').getStringVal() from test_table;

错误:

ORA-00904: "XML"."EXTRACT": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 1 Column: 8

您可能会发现这无需使用别名即可工作

select test_table.xml.extract('(//test/@id)[1]').getStringVal() from test_table;

正如另一条评论所说,xml.extract是一个对象方法。这意味着它不是一个可从任何地方访问的函数,它只能在处理表对象的特定实例时访问。一个简单的解释是,定义 xml.extract 的代码包含在定义表的代码中的某个地方,所以没有表,没有 xml.extract。

正如错误消息所暗示的那样,当它被单独调用时,Oracle不知道xml.extract是什么。

最新更新