从 Oracle DB 根据 Key 从 CDATA 中提取值

From Oracle DB Extract the Value from CDATA based on Key

我的XML在table如下

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

我想通过将密钥作为 3

传递来获取 SkpKSko= 的值

我正在使用查询

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

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

如果使用 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