2017-03-06 246 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

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

相关问题