我遇到一个奇怪的问题,即查询在表别名中完全正常,但在没有表格的情况下也不会。
所以,这应该是正常的:
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
答案 0 :(得分:0)
您可能会发现这可以不使用别名
select test_table.xml.extract('(//test/@id)[1]').getStringVal() from test_table;
正如另一条评论所说,xml.extract是一种对象方法。这意味着它不是可以从任何地方访问的函数,只能在处理表对象的特定实例时才能访问它。一个简单的解释是定义xml.extract的代码包含在定义表的代码中,因此没有表,没有xml.extract。
正如错误消息所示,当它自己被调用时,Oracle不知道xml.extract是什么。