Oracle existNode有效负载搜索

时间:2019-06-07 22:07:56

标签: oracle oracle-sqldeveloper oracledb

以下内容将对您有所帮助,因为我无法弄清楚出了什么问题,我正在使用existNode函数在表中搜索CLOBS,并且能够成功搜索特定值,但是我想做的是检查有效载荷中是否存在可选

表名称:EventPaylods

<A>
       <B>
             <C>
                    <C_a> 123</C_a>
                     <C_b>456</C_b>
             </C>
     </B>
</A>

因此,鉴于上面的“有效载荷”,我可以使用以下查询在表中“查找”此有效载荷

Select * 
From EventPayload
Where existsNode ( PAYLOAD, ‘/*:A/*:B/*:C/*C_a[.=“123”]’)>=1

但是我想做的是找到有效载荷而不知道的值,我做了一些研究,我应该能够通过使用下面的内容来简单地找到它,但是由于某种原因,它根本不起作用,我们将不胜感激

Select * 
From EventPayload
Where existsNode ( PAYLOAD, ‘/*:A/*:B/*:C/*C_a’)>=1

1 个答案:

答案 0 :(得分:0)

在XQuery中,:之前的部分是名称空间,之后是标签名称,因此*:A是任何名称空间和一个名为A的标签。您似乎没有使用命名空间,因此查询可以简单地写为:

测试数据

CREATE TABLE eventpayload ( payload CLOB );

INSERT INTO eventpayload ( payload )
VALUES ( '<A><B><C><C_a>123</C_a><C_b>456</C_b></C></B></A>' );

查询

Select * 
From EventPayload
Where existsNode ( XMLTYPE( PAYLOAD ), '/A/B/C/C_a[text()="123"]') = 1;

,并且没有text()过滤器:

Select * 
From EventPayload
Where existsNode ( XMLTYPE( PAYLOAD ), '/A/B/C/C_a') = 1;

db<>fiddle