【发布时间】:2015-10-24 16:34:45
【问题描述】:
我有一个带有 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
基本上,我将所有打开元素的值“展平”为一个字符串(在上面的示例 xml 中:101),然后找出是否出现了 0 关闭或 1 打开。我需要更好的可以索引的东西以避免全表扫描。
有没有什么方法可以通过 SQL 查询检索相应“open”值设置为1 或0 的“case”元素?
我目前正在通过解析整个 XML 的应用程序代码执行此操作,因为我无法从 Oracle 端找到有关如何执行此操作的任何文档。
谢谢
【问题讨论】: