2014-04-07 61 views
0

我需要標識所有記錄中存在標籤的地方,如<hint name="REAL_TIME_TAGGING" value="TRUE">。 xml作爲oracle clob存儲在表tab_a(xml clob列:col_a)中,並在此處顯示片段。在oracle clob中檢查xml標籤元素屬性值

<category> 
<hints> 
    <hint name="NO_DEDUP" value="FALSE"></hint> 
    <hint name="REAL_TIME_TAGGING" value="TRUE"></hint> 
    more <hint> elements 
    <hint ...> 
</hints> 
<elements> 
<element> 
... 
</element> 
</elements> 
</category> 

,我可以做如下:

select * from tab_a where EXTRACTVALUE (XMLTYPE (col_a),'/category/hints/hint[2]/@name') = 'REAL_TIME_TAGGING'; 

但是,我相信一定有使用existsnode等,這是不是爲我工作的一種更好的方式。 此外,這裏的捕捉是暗示[2]不一定是這種情況。在有些情況下,它可能在第二個位置以外的任何地方,並且上述查詢在其他情況下不在提示[2]位置時會失敗。

任何幫助將是非常讚賞。 任何幫助將非常感激。

+0

如何/類別/提示//提示/ @ name ='REAL_TIME_TAGGING'?這應該看所有元素。你是什​​麼意思,「existnode等不起作用?」你得到一個錯誤,或沒有結果回來?請在這種情況下顯示您正在嘗試的內容。 – OldProgrammer

+0

謝謝。我已經能夠使用existsNode來弄清楚了。得到了一個令我沮喪的ORA錯誤。但是,現在我已經消除它並正在工作。 – Casey

回答

0

感謝您花費的時間。 我已經能夠弄清楚了。

以防萬一,我的解決方案是:

select 
count(1) 
from tab_a 
where 
existsNode(xmltype(col_c), '//hints/hint[@name="REAL_TIME_TAGGING"]') = '1'