我的表格中包含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;值设置为1
或0
?
我目前正在通过解析整个XML的应用程序代码执行此操作,因为我无法从Oracle端找到有关如何执行此操作的任何文档。
由于
答案 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