Oracle SQL中的XMLSEQUENCE()

时间:2015-01-07 09:32:10

标签: sql xml oracle

我无法理解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做什么并返回。

1 个答案:

答案 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>