处理Oracle中的XMLType列

时间:2015-10-24 07:57:54

标签: xml oracle xmltype

我的表格中包含XMLType列,内容如下:

<root>
 <item>
  <case>1234</case>
  <open>1</open>
 </item>
 <item>
  <case>2345</case>
  <open>0</open>
 </item>
 <item>
  <case>3456</case>
  <open>1</open>
 </item>
 /* ..other item blocks may follow.. */
</root>

我想检查是否存在打开/关闭的情况。
我应该在查询WHERE子句中添加什么内容?

目前,我以最糟糕的方式工作:

SELECT somecolumn FROM sometable 
WHERE INSTR(EXTRACT(myxmlcolumn, '//open/text()'), '1') > 0

基本上,我是&#34;&#34; flattening&#34;所有开放元素&#39;值为字符串(在上面的示例xml中:101),然后查明是否有0关闭或1打开的情况。我需要更好的东西,可以索引以避免全表扫描。

有没有办法用SQL查询检索&#34; case&#34;具有相应的&#34; open&#34;值设置为10

我目前正在通过解析整个XML的应用程序代码执行此操作,因为我无法从Oracle端找到有关如何执行此操作的任何文档。

由于

1 个答案:

答案 0 :(得分:0)

可以通过XPATH完成:

select myxmlcolumn.EXTRACT('//item[open=0]/case') from sometable

如果你想要两者,open = 1 OR = 0然后

select myxmlcolumn.EXTRACT('//item[open=0 | open=1]/case') from sometable