Уникальная идентификация столбца PL/SQL из двух таблиц

Я использую Oracle 11G. У меня есть процедура PL/SQL, которая читает XML, используя xquery из столбца XMLTYPE в таблице. XML содержит данные ОТДЕЛА и его РАЗДЕЛОВ. ОТДЕЛ имеет отношения один ко многим с РАЗДЕЛАМИ, т. е. ОТДЕЛ может иметь один или несколько РАЗДЕЛОВ, и могут быть случаи, когда ОТДЕЛ не будет иметь никаких РАЗДЕЛОВ.

Структура 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

person Femme Fatale    schedule 02.05.2013    source источник
comment
Не могли бы вы показать, каким должен быть ваш ожидаемый результат?   -  person OldProgrammer    schedule 02.05.2013
comment
@OldProgrammer См. обновленный ожидаемый результат, спасибо   -  person Femme Fatale    schedule 02.05.2013


Ответы (1)


Вы можете сделать их внешними соединениями:

...
   from xml_unit_download t
     , xmltable(
... 
       ) (+) d
     , xmltable(
...
      ) (+) s
...

который дает:

DEPARTMENT_ID        DEPARTMENT_NAME                SECTIONS_ID          SECTIONS_NAME
-------------------- ------------------------------ -------------------- ------------------------------
DEP1                 myDEPARTMENT1                  6390135666643567     mySection1
DEP1                 myDEPARTMENT1                  6390135666643567     mySection2
DEP2                 myDEPARTMENT2                  63902                mySection1
DEP3                 myDEPARTMENT3
person Alex Poole    schedule 02.05.2013