我需要识别所有存在标记的记录,例如<hint name="REAL_TIME_TAGGING" value="TRUE">
。
xml作为oracle clob存储在表tab_a(xml clob column:col_a)中,并且此处显示了片段。
<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 :(得分:0)
感谢您花费的时间。 我已经弄清楚了。
以防万一,我的解决方案是:
select
count(1)
from tab_a
where
existsNode(xmltype(col_c), '//hints/hint[@name="REAL_TIME_TAGGING"]') = '1'
答案 1 :(得分:0)
也许您可以尝试使用 dbms_lob.instr 函数进行查询。例如:
select *
from table
where dbms_lob.instr(clob_column, 'some content') >= 1
希望它有所帮助。更多相关信息:https://brunozambiazi.wordpress.com/2015/08/26/finding-a-particular-content-in-oracle-clob-column/