从 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=
我的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=