处理 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" 值设置为 1
或 0
?
我目前正在通过解析整个 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
我有一个 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" 值设置为 1
或 0
?
我目前正在通过解析整个 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