Как получить конкретные данные из XML в таблице Oracle - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть таблица оракула, в которой есть столбец, в котором хранится XML.XML имеет следующий синтаксис:

<?xml version="1.0"?>
<MessageData>
  <TextblockParameters>
    <TextblockParameter>
      <tagName>BUSINESSPROCESSID</tagName>
      <value>RETAIL</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>SEGMENT</tagName>
      <value>RESIDENTIAL</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>TRANSACTIONTYPE</tagName>
      <value>PURCHASE</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>LANGUAGE</tagName>
      <value>EST</value>
    </TextblockParameter>
  </TextblockParameters>
</MessageData>

Теперь мне нужно получить информацию из <value></Value> из всех 4 мест.Пожалуйста, помогите с этой проблемой, не знаю, является ли Extractvalue лучшим решением

Ответы [ 2 ]

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

Для этого можно использовать функцию XMLTABLE ( см. Примеры ):

SELECT t.foo, xt.*
FROM t, XMLTABLE('//TextblockParameter'
    PASSING t.xmlcol
    COLUMNS
        tagName VARCHAR2(100) PATH './tagName',
        value VARCHAR2(100) PATH './value'
) xt;

Демонстрация по дб <> fiddle

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

вы можете использовать

select extract(col1, '//value') from t;
create table t (col1 xmltype);
insert into t values ('
<MessageData>
  <TextblockParameters>
    <TextblockParameter>
      <tagName>BUSINESSPROCESSID</tagName>
      <value>RETAIL</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>SEGMENT</tagName>
      <value>RESIDENTIAL</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>TRANSACTIONTYPE</tagName>
      <value>PURCHASE</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>LANGUAGE</tagName>
      <value>EST</value>
    </TextblockParameter>
  </TextblockParameters>
</MessageData>');
1 rows affected
select extract(col1, '//value') from t;
| EXTRACT(COL1,'//VALUE')                                                                                  |
| :------------------------------------------------------------------------------------------------------- |
| <value>RETAIL</value><br><value>RESIDENTIAL</value><br><value>PURCHASE</value><br><value>EST</value><br> |

дБ <> скрипка здесь

...