处理 Oracle 中的 XMLType 列

Dealing with XMLType columns in Oracle

我有一个 table 和一个 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>

我想检查是否有open/closed个案例。
我应该在查询WHERE子句中输入什么?

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

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

基本上,我"flattening"所有开放元素的值到一个字符串(在上面的示例xml中:101)然后找出是否出现0 关闭或 1 打开。我需要更好的东西,它可以被索引以避免完整的 table 扫描。

是否有任何方法可以通过 SQL 查询检索 "case" 元素,这些元素的相应 "open" 值设置为 10?

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

谢谢

可以通过XPATH来完成:

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

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

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