我无法理解Oracle中XMLSEQUENCE()函数的用途。我正在使用代码
Select XMLSEQUENCE(EXTRACT(Some_XML,Some_Xpath)) from dual;
假设我有Some_XML
<a>
<b>
<c>
<d>4</d>
</c>
</b>
</a>
和Some_Xpath = '/<b>'
现在我的问题是EXTRACT函数将返回
<b> <c> <d>4</d> </c> </b>
XMLSEQUENCE将对此XML做什么并返回。
答案 0 :(得分:0)
首先关闭xpath '/<b>'
格式不正确。尖括号不属于。
其次,如果根节点为<b>
,则xpath将仅选择任何内容。 '//b'
的xpath将选择XML中的每个<b>
节点,或'/a/b'
将选择作为根节点a的子节点的每个b节点。
修复了xpath之后,查询中的XMLSEQUENCE
会将EXTRACT
返回的XMLType转换为名为COLUMN_VALUE
的XMLTypes的单个列表,每个列都有一条记录EXTRACT
返回的XML片段。对于XML,只有一个XML片段,因此表中只有一条记录。
如果在外部select语句的TABLE
子句中使用查询的FROM
运算符,则可以看到结果:
select * from table(
select xmlsequence(extract(xmltype('<a>
<b>
<c>
<d>4</d>
</c>
</b></a>'),'/a/b')) from dual);
COLUMN_VALUE
----------------------
<b><c><d>4</d></c></b>
如果你的xpath返回了多个节点,你会看到多条记录返回:
select * from table(
select xmlsequence(extract(xmltype('<a>
<d>4</d>
<d>5</d>
<d>6</d>
</a>'),'/a/d')) from dual);
COLUMN_VALUE
------------
<d>4</d>
<d>5</d>
<d>6</d>