1
處理我有一個表與內容的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
基本上,我「扁平化」所有打開的元素的值的字符串(在示例XML以上:101
)和然後查明是否有出現0
close或1
開放。我需要更好的索引以避免全表掃描。
有沒有什麼辦法可以用SQL查詢檢索具有相應的「打開」值設置爲1
或0
的「case」元素?
我目前正在從我的應用程序代碼解析整個XML,因爲我一直沒有找到任何有關如何從Oracle端做到這一點的文檔。
感謝
這工作就像一個魅力,但我有修改查詢爲: '從sometable'選擇EXTRACT(myxmlcolumn,'// item [open = 1]/case')。 我也已經能夠在它上面創建一個索引,但是需要在'EXTRACT'函數的末尾加上'.getStringVal()'來使它工作。非常感謝。 – comcas