2013-05-02 3 views
0

Oracle 11G를 사용하고 있습니다. 테이블의 XMLTYPE 열에서 xquery를 사용하여 XML을 읽는 PL/SQL 프로 시저가 있습니다. XML에는 DEPARTMENT 및 SECTIONS의 데이터가 들어 있습니다. DEPARTMENT는 SECTIONS와 일대일로 많은 관계가 있습니다. 즉, DEPARTMENT에는 하나 이상의 SECTIONS가있을 수 있으며 DEPARTMENT에는 SECTIONS가없는 인스턴스가있을 수 있습니다.두 테이블의 PL/SQL 고유 열 식별

XML의 구조는 <DATA> 태그가 DEPARTMENT 및 해당하는 섹션 집합을 식별하는 태그입니다. 내가 사용하고

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 
+0

예상되는 결과가 무엇인지 보여줄 수 있습니까? – OldProgrammer

+0

@OldProgrammer 업데이트 된 예상 출력을 참조하십시오. 감사합니다. –

답변

2

당신은 그들을 만들 수 있습니다 업데이트] 외부 조인 :

... 
    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