Я использую Oracle 11G. У меня есть процедура PL/SQL, которая читает XML, используя xquery из столбца XMLTYPE в таблице. XML содержит данные Департамента и его разделов. ОТДЕЛ имеет отношение «один к большому» с СЕКЦИЯМИ, т. Е. ОТДЕЛ может иметь одну или несколько СЕКЦИЙ, и могут быть случаи, когда ОТДЕЛ НЕ будет иметь СЕКРЕТОВ.Уникальная идентификация столбца PL/SQL из двух таблиц
Структура XML такова, что тег <DATA>
идентифицирует ОТДЕЛ и набор соответствующих СЕКЦИЙ.
XML
<ROWSET>
<DATA>
<DEPARTMENT>
<DEPARTMENT_ID>DEP1</DEPARTMENT_ID>
<DEPARTMENT_NAME>myDEPARTMENT1</DEPARTMENT_NAME>
</DEPARTMENT>
<SECTIONS>
<SECTIONS_ID>6390135666643567</SECTIONS_ID>
<SECTIONS_NAME>mySection1</SECTIONS_NAME>
</SECTIONS>
<SECTIONS>
<SECTIONS_ID>6390135666643567</SECTIONS_ID>
<SECTIONS_NAME>mySection2</SECTIONS_NAME>
</SECTIONS>
</DATA>
<DATA>
<DEPARTMENT>
<DEPARTMENT_ID>DEP2</DEPARTMENT_ID>
<DEPARTMENT_NAME>myDEPARTMENT2</DEPARTMENT_NAME>
</DEPARTMENT>
<SECTIONS>
<SECTIONS_ID>63902</SECTIONS_ID>
<SECTIONS_NAME>mySection1</SECTIONS_NAME>
</SECTIONS>
</DATA>
<DATA>
<DEPARTMENT>
<DEPARTMENT_ID>DEP3</DEPARTMENT_ID>
<DEPARTMENT_NAME>myDEPARTMENT3</DEPARTMENT_NAME>
</DEPARTMENT>
</DATA>
</ROWSET>
запросов, которые я использую это: -
select d.department_id
, d.department_name
, s.sections_id
, s.sections_name
from xml_unit_download t
, xmltable(
'/ROWSET/DATA'
passing t.xml_file
columns
DEPARTMENT_ID varchar2(20) path 'DEPARTMENT/DEPARTMENT_ID'
, DEPARTMENT_NAME varchar2(30) path 'DEPARTMENT/DEPARTMENT_NAME'
, SECTIONS xmltype path 'SECTIONS'
) d
, xmltable(
'/SECTIONS'
passing d.sections
columns
SECTIONS_ID varchar2(20) path 'SECTIONS_ID'
, SECTIONS_NAME varchar2(30) path 'SECTIONS_NAME'
) s
where
t.Status = 7
Сейчас этот XQUERY не принести результата DEP3, как будет я еду это?
------------- ОБНОВЛЕНО -------------
Ожидаемый результат
DEPARTMENT_ID DEPARTMENT_NAME SECTIONS_ID SECTIONS_NAME
-------------------- ------------------------------ --------------------
DEP1 myDEPARTMENT1 6390135666643567 mySection1
DEP1 myDEPARTMENT1 6390135666643567 mySection2
DEP2 myDEPARTMENT2 63902 mySection1
DEP3 myDEPARTMENT3
Можете ли вы показать, каков ваш ожидаемый результат? – OldProgrammer
@OldProgrammer См. Обновленный ожидаемый результат, спасибо –