Невозможно продублировать.Пример кода ниже:
Создать таблицу
create table xml_table (
xml_name varchar2(100),
xml_doc xmltype
);
Вставить данные
insert into xml_table (xml_name, xml_doc) values (
'EMPDETAILS',
xmltype('
<ROWSET>
<ROW>
<DEPTNO>10 </DEPTNO>
<NAME>ACCOUNTING</NAME>
<LOC>NEW YORK</LOC>
</ROW>
<ROW>
<DEPTNO>20</DEPTNO>
<DNAME>RESEARCH</DNAME>
<LOC>DALLAS</LOC>
</ROW>
<ROW>
<DEPTNO>30</DEPTNO>
<DNAME>SALES</DNAME>
<LOC>CHICAGO</LOC>
</ROW>
<ROW>
<DEPTNO>40</DEPTNO>
<DNAME>OPERATIONS</DNAME>
<LOC>BOSTON</LOC>
</ROW>
</ROWSET>
'));
insert into xml_table (xml_name, xml_doc) values (
'OTHERDETAILS',
xmltype('
<ROWSET>
<ROW>
<ELEMENT>HELIUM</ELEMENT>
</ROW>
</ROWSET>')
);
Запрос с использованием табличных данных
with t as( select xml_doc x from xml_table where xml_name='EMPDETAILS' )
select extractvalue(t2.column_value,'ROW/DEPTNO') DEPTNO ,
extractvalue(t2.column_value,'ROW/DNAME') DNAME,
extractvalue(t2.column_value,'ROW/LOC') LOCATION
from t t, table(xmlsequence(t.x.extract('ROWSET/ROW'))) t2;
Запрос с использованием экземпляра XMLType
with t as( select xmltype('<ROWSET>
<ROW>
<DEPTNO>10 </DEPTNO>
<NAME>ACCOUNTING</NAME>
<LOC>NEW YORK</LOC>
</ROW>
<ROW>
<DEPTNO>20</DEPTNO>
<DNAME>RESEARCH</DNAME>
<LOC>DALLAS</LOC>
</ROW>
<ROW>
<DEPTNO>30</DEPTNO>
<DNAME>SALES</DNAME>
<LOC>CHICAGO </LOC>
</ROW>
<ROW>
<DEPTNO>40</DEPTNO>
<DNAME>OPERATIONS</DNAME>
<LOC>BOSTON</LOC>
</ROW>
</ROWSET>
') x from dual)
select extractvalue(t2.column_value,'ROW/DEPTNO') DEPTNO ,
extractvalue(t2.column_value,'ROW/DNAME') DNAME,
extractvalue(t2.column_value,'ROW/LOC') LOCATION
from t t, table(xmlsequence(t.x.extract('ROWSET/ROW'))) t2;