Из базы данных Oracle извлечь значение из CDATA на основе ключа - PullRequest
0 голосов
/ 21 февраля 2019

Мой 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 записям.

1 Ответ

0 голосов
/ 21 февраля 2019

Возможно, вы могли бы получить желаемый результат, если вы извлекаете CDATA с помощью XMLTABLE, а затем передаете его следующему 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

...