Получить xmltype в поле в столбце Oracle CLOB

У меня есть тип столбца CLOB, который содержит формат xml.

Мне нужно получить с помощью простого запроса все разные типы из этого поля:

Бывший. Поле содержит различные типы:

First record:
<Message type="New Address" xmlns="http://euroconsumers.org/ecommerce/2009/01/scope/messages"><Customer ...

Second record:
<Message type="Added Email" xmlns="http://euroconsumers.org/ecommerce/2009/01/scope/messages"><Customer ...

Third record:
<Message type="New Order" xmlns="http://euroconsumers.org/ecommerce/2009/01/scope/messages"><Customer ...

Я хотел бы получить:

New Address
Added Email
New Order

person Khristian Liahut    schedule 28.02.2014    source источник
comment
Это может быть полезно: psoug.org/reference/xml_functions.html   -  person Lajos Veres    schedule 28.02.2014


Ответы (1)


Это работает для ваших данных:

select xmlquery('/*/@type'
  passing xmltype(<clob column>)
  returning content)
from <your table>;

Демо:

create table t42 (clob_col clob);
insert into t42 values ('<Message type="New Address" xmlns="..."><Customer type="x"></Customer></Message>');
insert into t42 values ('<Message type="Added Email" xmlns="..."><Customer></Customer></Message>');
insert into t42 values ('<Message type="New Order" xmlns="..."><Customer></Customer></Message>');

select xmlquery('/*/@type'
  passing xmltype(t42.clob_col)
  returning content)
from t42;

XMLQUERY('/*/@TYPE'PASSINGXMLTYPE(T42.CLOB_COL)RETURNINGCONTENT)
----------------------------------------------------------------
New Address
Added Email
New Order

Или это:

select xmltype(<clob_column>).extract('/*/@type')
from <your table>;

Демо:

select xmltype(clob_col).extract('/*/@type')
from t42;

XMLTYPE(CLOB_COL).EXTRACT('/*/@TYPE')
-------------------------------------
New Address
Added Email
New Order

Подробнее о запросах XML.

person Alex Poole    schedule 28.02.2014