具有多节点 xpath 的 oracle xmltable 表达式是否保留节点的物理顺序?

Is oracle xmltable expression with multinode xpath preserve physical order of node?

当对 XML 类型有关系视图时。我可以保证元素的顺序保持您可以在 XML 文档中找到的物理顺序吗?

示例:

select *
from xmltable('root/level1' passing xmltype ('<root><level1><a>first</a></level1><level1><a>second</a></level1></root>')
columns col varchar2(2000) path '/a'
);

我可以保证它总是

  1. 第一

背景信息:我们必须保留 "client defined" 订单。但是在 XML 文档中我们没有关于这个顺序的任何属性。我们必须依赖 xml 文档中提供的物理顺序。

如果顺序反映物理顺序,那么我可以使用 rownum 进行排序。

在我的本地测试中订单被保留,但我没有找到任何关于这个事实的文档。

您的查询可以重写为 FLWR 表达式。

select *
from xmltable('for $i in ./root/level1 return $i ' passing xmltype ('<root><level1><a>first</a></level1><level1><a>second</a></level1></root>')
columns col varchar2(2000) path '/a'
);

现在您可以查看 FLWR 的 w3c 规范。FLWR Expressions

...and the order of the results is preserved in the output document....

Oracle 说 xml db

Oracle XML DB supports the latest version of the XQuery language specification, W3C XQuery 1.0 Recommendation. This section presents a brief overview of the language. For more information, consult a recent book on the language or refer to the standards documents that define it, which are available at http://www.w3c.org.