2014-04-07 63 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'