我在Oracle数据库的一个XMLType列下提取存储在特定XPath下的所有可能值时遇到问题。
我尝试了existsNode,它只能返回我指定内容的XML(product_1),但是我需要查询返回指定XPath下我的表中出现的所有值。 我知道我需要使用select distinct,但不确定如何构建我的查询以使其工作。
目前我在这里:
select distinct (my_table) where
existsNode(my_table,'/warehouse/shelf[productId="product_1"]','xmlns="xmnls_path"')
=1;
答案 0 :(得分:0)
你可以试试这个:
select distinct extractvalue( value(tags), 'shelf/data/text()')
from table( xmlsequence( xmltype(
'<warehouse>
<shelf productId="product_1">
<data>bla1-bla1</data>
</shelf>
<shelf productId="product_1">
<data>bla2-bla2</data>
</shelf>
<shelf productId="product_1">
<data>bla2-bla2</data>
</shelf>
<shelf productId="product_2">
<data>bla3-bla3</data>
</shelf>
</warehouse>'
).extract('warehouse/shelf[@productId="product_1"]'))) tags
或者如果您想要与所有行不同:
select distinct extractvalue( value(tags), 'shelf/data/text()') val
from my_table, table( xmlsequence(
xmltype( my_table.xmlclobcolumn ).extract('warehouse/shelf[@productId="product_1"]')
)) tags