Как получить значение типа XML blob в PLSQL?

У меня есть формат данных XML, подобный этому.

<"id=1">
   <"a">Test<"/a">
   <"b">Test2<"/b">
   <"c">Test3<"/c">

Как получить значение C в поле XMLData?

*value C is Test3

person aldiyudha    schedule 07.03.2018    source источник
comment
Ваши данные недействительны XML   -  person Wernfried Domscheit    schedule 07.03.2018
comment
Что такое тип большого двоичного объекта XML?   -  person Wernfried Domscheit    schedule 07.03.2018


Ответы (1)


Как получить значение C в поле XMLData?

Как уже упоминал @Wernfried Domscheit, ваш xml выглядит неправильно. См. ниже один из способов сделать это:

create table traptabclob(testclob clob);
/

insert into traptabclob 
values
('<?xml version="1.0" encoding="UTF-8"?>
<DCResponse>
 <id>
   <Field key="a">Test</Field>
   <Field key="b">Test2</Field>
   <Field key="c">Test3</Field> 
  </id>                            
</DCResponse>');
/

Запрос:

SELECT 
EXTRACTVALUE(xmltype(testclob), '/DCResponse/id/Field[@key="c"]') col1
FROM traptabclob;

Выход:

Col1
----
Test3

ДЕМО

Изменить:

Спасибо за ваш ответ, мои данные не имеют тега <?xml> version="1.0"...., мои данные похожи на <row> id="1"><a>Test</a><b>Test2</b></row>, они выглядят как тип xml, но я не знаю, это тип xml или нет. Спасибо

Пожалуйста, обратите внимание, что я только что привел пример действительного XML-файла, который обычно содержит <?xml> version="1.0"..... Однако проблема с вашим XML-кодом заключается в размещении тегов в ". Посмотрите ниже, как это работает:

create table traptabclob(testclob clob);
insert into traptabclob values('
 <id>
   <a>Test</a>
   <b>Test2</b>
   <c>Test3</c> 
  </id>');

Запрос:

SELECT EXTRACTVALUE(xmltype(testclob), '/id/c') col1 
FROM traptabclob ;

Выход:

Col1
----
Test3

ДЕМО 1

person XING    schedule 07.03.2018
comment
Спасибо за ваш ответ, мои данные не имеют тега ‹?xml version=1.0.... мои данные точно такие же, как ‹row id=1›‹a›Test‹/a›‹b›Test2‹/b›‹ /row›, это похоже на тип xml, но я не знаю, это тип xml или нет. Спасибо - person aldiyudha; 08.03.2018
comment
я пробовал SELECT EXTRACTVALUE(xmltype(testclob), '/ROW/c2') col1 FROM traptabclob в sqlfiddle, это работает, но когда я пробовал в sql-разработчике, это не работает - person aldiyudha; 08.03.2018
comment
@aldiyudha Можете ли вы отредактировать свой вопрос и добавить то, что вы пробовали? - person XING; 08.03.2018
comment
спасибо за ваш ответ, это работает, но я не использовал функцию xmltype, потому что мои данные уже xmltype - person aldiyudha; 09.03.2018