2017-03-06 98 views
1

我在包含XML類型列的Oracle 12c數據庫中有一個表,我需要從此列中提取值。 這裏本專欄的內容的一個例子:如何在Oracle數據庫中提取XML值

<AbcMsg xmlns="http://example.org/SCL/CommonTypes"> 
 
    <Msg> 
 
    <Pmnt> 
 
     <swif:SWIFT MT="202" xmlns:swif="urn:abc/scl/SWIFT" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
 
     <swif:Header> 
 
      <swif:Input_Output_Identifier>O</swif:Input_Output_Identifier> 
 
      <swif:Sender_BIC>XXXXXXXXXXX</swif:Sender_BIC> 
 
      <swif:Receiver_BIC>XXXXXXXXXXX</swif:Receiver_BIC> 
 
      <swif:Message_Priority>NORM</swif:Message_Priority> 
 
      <swif:User_Header> 
 
      <swif:Message_User_Reference>XXXXXXXXXXXXXXXXX</swif:Message_User_Reference> 
 
      </swif:User_Header> 
 
      <swif:Original_Swift> 
 
      <swif:Message>DATA TO BE EXTRACTED</swif:Message> 
 
      </swif:Original_Swift> 
 
      <swif:Create_Date_Time>2016-07-28T15:45:00</swif:Create_Date_Time> 
 
      <swif:Msg_ID>POFu7yCXHoN</swif:Msg_ID> 
 
      <swif:Sequence_Number>248600</swif:Sequence_Number> 
 
      <swif:Session_Number>6184</swif:Session_Number> 
 
     </swif:Header> 
 
     <swif:Data xsi:type="swif:Data_202"> 
 
      <swif:F20> 
 
      <swif:Sender_s_Reference>POFu7yCXHoN</swif:Sender_s_Reference> 
 
      </swif:F20> 
 
      <swif:F21> 
 
      <swif:Related_Reference>XXXXXXXXXXX</swif:Related_Reference> 
 
      </swif:F21> 
 
      <swif:F32A> 
 
      <swif:Currency>USD</swif:Currency> 
 
      <swif:Amount>156020000</swif:Amount> 
 
      <swif:Date>2016-07-28</swif:Date> 
 
      </swif:F32A> 
 
      <swif:Cdrt_F58a_F59a> 
 
      <swif:Account>174208531</swif:Account> 
 
      <swif:Identifier_Code>XXXXXXXXX</swif:Identifier_Code> 
 
      </swif:Cdrt_F58a_F59a> 
 
     </swif:Data> 
 
     </swif:SWIFT> 
 
    </Pmnt> 
 
    <Extn/> 
 
    </Msg> 
 
</AbcMsg>

我需要檢索的<swif:Original_Swift>價值。我試過函數EXTRACT(xml_column,'/ AbcMsg/Msg/Pmnt'),但它一直返回null。

任何線索怎麼做?

在此先感謝。

+0

我用不同的方法解決了它,使用其他函數。但是它取決於你保持它的重複。 –

回答

1

嘗試使用xmltable或xmlquery。你必須聲明defult和swif namesapce;

select * from xmltable(XMLNAMESPACES('urn:abc/scl/SWIFT' as "swif", default 'http://example.org/SCL/CommonTypes') , '/AbcMsg/Msg/Pmnt/swif:SWIFT/swif:Header/swif:Original_Swift' passing xmltype(your_xml_here)); 
+0

我能夠使用EXTRACTVALUE函數執行我想要的操作: 'EXTRACTVALUE(xml_column,'// b:Header/b:Original_Swift','xmlns:b =「urn:abc/scl/SWIFT」')AS 「提取」' –

+0

是的,這是可能的。但oracle將'extractvalue'標記爲已棄用,並建議使用'xmltable'和'xmlquery'。 [檢查說明](https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions061.htm#SQLRF06173) –

+0

不知道。非常感謝提供信息! –

相關問題