2017-04-19 6 views
0

私のXMLはこのように見えます。Oracle 11G複数のループインスルーXMLはPL/SQLのノードと同じ

<mapaDatosUsuario> 
      <item> 
       <campo>pair1</campo> 
       <valor>value1</valor> 
      </item> 
      <item> 
       <campo>pair2</campo> 
       <valor>value2</valor> 
      </item> 
      <item> 
       <campo>pair3</campo> 
       <valor>value3</valor> 
      </item> 
      <item> 
       <campo>pair4</campo> 
       <valor>value4</valor> 
      </item> 
      <item> 
       <campo>pair5</campo> 
       <valor>value5</valor> 
      </item> 
      <item> 
       <campo>pair6</campo> 
       <valor>value6</valor> 
      </item> 
      <item> 
       <campo>pair7</campo> 
       <valor>value7</valor> 
      </item> 
      <item> 
       <campo>pair8</campo> 
       <valor>value8</valor> 
      </item> 
      <item> 
       <campo>pair9</campo> 
       <valor>value9</valor> 
      </item> 
      <item> 
       <campo>pair10</campo> 
       <valor>value10</valor> 
      </item> 
      <item> 
       <campo>pair11</campo> 
       <valor>value11</valor> 
      </item> 
      <item> 
       <campo>pair12</campo> 
       <valor>value12</valor> 
      </item> 
     </mapaDatosUsuario> 
     <mapaDatosUsuario> 
      <item> 
       <campo>pair1</campo> 
       <valor>value1</valor> 
      </item> 
      <item> 
       <campo>pair2</campo> 
       <valor>value2</valor> 
      </item> 
      <item> 
       <campo>pair3</campo> 
       <valor>value3</valor> 
      </item> 
      <item> 
       <campo>pair4</campo> 
       <valor>value4</valor> 
      </item> 
      <item> 
       <campo>pair5</campo> 
       <valor>value5</valor> 
      </item> 
      <item> 
       <campo>pair6</campo> 
       <valor>value6</valor> 
      </item> 
      <item> 
       <campo>pair7</campo> 
       <valor>value7</valor> 
      </item> 
      <item> 
       <campo>pair8</campo> 
       <valor>value8</valor> 
      </item> 
      <item> 
       <campo>pair9</campo> 
       <valor>value9</valor> 
      </item> 
      <item> 
       <campo>pair10</campo> 
       <valor>value10</valor> 
      </item> 
      <item> 
       <campo>pair11</campo> 
       <valor>value11</valor> 
      </item> 
      <item> 
       <campo>pair12</campo> 
       <valor>value12</valor> 
      </item> 
     </mapaDatosUsuario> 

と私はストレージに列 PAIR1 pair3 pair5 pair6 pair7

といくつかのxmlノードを持つテーブルを持っているが、私は唯一のmapaDatosUsuarioを抽出しますが、私は抽出することができます方法を知ってはいけません値

の残りの部分は、私は、事前にその

おかげで私を助けることができます!

答えて

1
SELECT * 
FROM XMLTABLE(
     '//root/mapaDatosUsuario' 
     PASSING XMLTYPE('<root>' || your_xml || '</root>') 
     COLUMNS pair1 VARCHAR2(100) PATH './item/campo[text()="pair1"]/../valor/text()', 
       pair3 VARCHAR2(100) PATH './item/campo[text()="pair3"]/../valor/text()', 
       pair5 VARCHAR2(100) PATH './item/campo[text()="pair5"]/../valor/text()', 
       pair7 VARCHAR2(100) PATH './item/campo[text()="pair7"]/../valor/text()' 
     ); 

出力

PAIR1  PAIR3  PAIR5  PAIR7  
---------- ---------- ---------- ---------- 
value1  value3  value5  value7  
value1  value3  value5  value7  

または、XMLノードを取得する:

SELECT * 
FROM XMLTABLE(
     '//root/mapaDatosUsuario' 
     PASSING XMLTYPE('<root>' || your_xml || '</root>') 
     COLUMNS pair1 XMLTYPE PATH './item/campo[text()="pair1"]/..', 
       pair3 XMLTYPE PATH './item/campo[text()="pair3"]/..', 
       pair5 XMLTYPE PATH './item/campo[text()="pair5"]/..', 
       pair7 XMLTYPE PATH './item/campo[text()="pair7"]/..' 
     ); 
+0

うわー素晴らしいです!ありがとう、私はfisrtブロックをテストし、完全に動作します! –

関連する問題