Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle XML提取方法-表别名要求_Sql_Xml_Oracle - Fatal编程技术网

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

Sql Oracle XML提取方法-表别名要求,sql,xml,oracle,Sql,Xml,Oracle,我遇到了一个奇怪的问题,查询在使用表别名时绝对可以正常工作,但在没有别名时却不行 因此,这是应该的: 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 ide

我遇到了一个奇怪的问题,查询在使用表别名时绝对可以正常工作,但在没有别名时却不行

因此,这是应该的:

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是什么。

xml.extract()
是一种对象方法,需要别名。这记录在。然而,我不明白这其中的技术原因。