在一个SQL视图中组合两个XML容器信息

时间:2016-06-03 18:26:30

标签: sql xml oracle parent-child

因为有一段时间我在SQL中寻找连接的可能性,以便连接两个xml容器的父节点。

父节点:

  select t.id,x."FA_SCHLUESSEL"  
   from xmldocs t  
      , xmltable('/Qualitaetsbericht/Organisationseinheiten_Fachabteilungen/Organisationseinheit_Fachabteilung/Fachabteilungsschluessel'  
          passing t.doc  
          columns 
          FA_Schluessel varchar2(12) path 'FA_Schluessel'
   ) x

子节点:

 select t.id,x."OPS_301",x."ANZAHL"
   from xmldocs t  
      , xmltable('/Qualitaetsbericht/Organisationseinheiten_Fachabteilungen/Organisationseinheit_Fachabteilung/Prozeduren/Verpflichtend/Prozedur'  
          passing t.doc  
          columns 
          OPS_301 varchar2(12) path 'OPS_301'
       , Anzahl varchar2(40) path 'Anzahl'
   ) x

我对找到答案感到非常沮丧。任何想法都非常受欢迎。提前谢谢。

2 个答案:

答案 0 :(得分:0)

Select 
  Extract(doc, '/Qualitaetsbericht/Organisationseinheiten_Fachabteilungen/Organisationseinheit_Fachabteilung/Fachabteilungsschluessel/FA_Schluessel' as FA_Schluessel,
  Extract(doc, '/Qualitaetsbericht/Organisationseinheiten_Fachabteilungen/Organisationseinheit_Fachabteilung/Prozeduren/Verpflichtend/Prozedure/OPS_301') as OPS_301,
  Extract(doc, '/Qualitaetsbericht/Organisationseinheiten_Fachabteilungen/Organisationseinheit_Fachabteilung/Prozeduren/Verpflichtend/Prozedure/Anzahl') as Anzahl
From xmldocs

答案 1 :(得分:0)

SELECT id,
       d.*
FROM   XMLDocs x,
       XMLTable(
         '/Data'
         PASSING XMLQuery(
           'for $i in /Qualitaetsbericht/Organisationseinheiten_Fachabteilungen/Organisationseinheit_Fachabteilung/Prozeduren/Verpflichtend/Prozedur
            return <Data>
                     {$i/OPS_301}
                     {$i/Anzahl}
                     {$i/../../../Fachabteilungsschluessel/FA_Schluessel}
                   </Data>'
            PASSING doc
            RETURNING CONTENT
         )
         COLUMNS FA_Schluessel varchar2(12) path 'FA_Schluessel',
                 OPS_301       varchar2(12) path 'OPS_301',
                 Anzahl        varchar2(40) path 'Anzahl'
       ) d;