2010-10-05 49 views
2

我有一個oracle表,它有一個以CLOB格式存儲XML的列。 XML具有以下語法:如何從Oracle表中檢索特定的XML節點?

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<BaseXML Version="2009.4"> 
<InvoiceCanvasDetails> 
    <Grouping> 
     <ParentGroup Name=」Parent group 1」 ID=」100」> 
     <ParentGroupLineItems> 
     <Item ID="461616" Name=」Item 1」> 
      <Papers Quantity=10000> 
          <Paper Name="UNCOATED GROUNDWOOD SCA+ (25X38)"  
             ID="126287" Weight="1268" Type=」A4」 /> 
          <Paper Name="COATED GROUNDWOOD SCA+ (25X38)"  
             ID="126288" Weight="1290" Type=」A4」 /> 
        </Papers> 
       </Item> 
     </ParentGroupLineItems> 
    </ParentGroup> 
    </Grouping> 
</InvoiceCanvasDetails> 
</BaseXML> 

現在,我只想檢索與每個項目對應的紙張信息。即給定項目ID,使用查詢檢索與其關聯的所有論文。請指導我這是做到這一點的最佳方式。

回答

5

您可以使用extractextractvalue組合:

SQL> SELECT extractvalue(column_value, 'Paper/@Name') NAME, 
    2   extractvalue(column_value, 'Paper/@ID') ID, 
    3   extractvalue(column_value, 'Paper/@Weight') Weight, 
    4   extractvalue(column_value, 'Paper/@Type') TYPE 
    5 FROM TABLE (SELECT xmlsequence(XMLTYPE(a).extract('BaseXML/' || 
    6            'InvoiceCanvasDetails/' || 
    7            'Grouping/ParentGroup/' || 
    8            'ParentGroupLineItems/' || 
    9            'Item/Papers/Paper')) 
10     FROM t); 

NAME          ID   WEIGHT  TYPE 
---------------------------------------- ---------- ---------- ----- 
UNCOATED GROUNDWOOD SCA+ (25X38)   126287  1268  A4 
COATED GROUNDWOOD SCA+ (25X38)   126288  1290  A4 

如果你正在尋找一個特定的ID,就可以直接在extract功能篩選數據:

SQL> SELECT extract(XMLTYPE(a), 
    2     'BaseXML/InvoiceCanvasDetails/Grouping/' || 
    3     'ParentGroup/ParentGroupLineItems/' || 
    4     'Item/Papers/Paper[@ID="126287"]') ext 
    5 FROM t; 

EXT 
-------------------------------------------------------------------------------- 
<Paper Name="UNCOATED GROUNDWOOD SCA+ (25X38)" ID="126287" Weight="1268" Type="A 
4"/> 
+0

非常感謝你很多的答案..這與SQL加號工作得很好.. – Pradeep 2010-10-06 06:34:38

+0

在11g [使用extractvalue已棄用](http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/functions061.htm #i1131042)。你能舉一個使用推薦功能的例子嗎? – user272735 2011-05-27 06:36:38

+0

@ user272735:參見[xml to oracle數據庫表](http://stackoverflow.com/questions/1231981/xml-to-oracle-db-table-encountering-problems/1232209#1232209)或[Oracle:加載大xml文件?](http://stackoverflow.com/questions/998055/oracle-loading-a-large-xml-file/1000331#1000331)例如使用XMLTABLE – 2011-05-27 08:40:18