来自Oracle DB基于Key从CDATA中提取值

问题描述 投票:0回答:1

我在表格中的XML如下

<fields><field key="2" val="5" type="D"/><![CDATA[<field key="3" val="SkpKSko=" 
type="T"></field>]]></fields>

我想通过传递密钥作为SkpKSko=来获得3的价值

我在使用查询

SELECT x.val  from Valuefromglobal ,xmltable('/fields/field[@key=2]' PASSING 
XMLFILED COLUMNS val VARCHAR2(400) PATH '@val' ) x 

上面的查询给了我5预期答案的结果。但是,如果我将我的参数更改为@key=3以获取CDATA值,从而产生0条记录。

xml oracle cdata
1个回答
0
投票

如果使用XMLTABLE提取CDATA,然后将其传递给下一个XMLTABLE以获取VAL属性,也许可以获得所需的结果。

select
  x2.val
from xmltable('/fields'
              passing xmltype('
                        <fields>
                          <field key="2" val="5" type="D"/>
                          <![CDATA[<field key="3" val="SkpKSko=" type="T">
                                   </field>]]>
                        </fields>
                      ')
              columns cdata varchar2(2048) path 'text()') as x1,
     xmltable('/field[@key=3]'
              passing xmltype(x1.cdata)
              columns val varchar2(30) path '@val') as x2;

输出:

VAL
--------
SkpKSko=

DB<>FIDDLE

© www.soinside.com 2019 - 2024. All rights reserved.