如何在Oracle数据库中提取XML值

时间:2017-03-06 13:55:28

标签: sql xml oracle

我在Oracle 12c数据库中有一个包含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。

关于如何做到这一点的任何线索???

先谢谢。

1 个答案:

答案 0 :(得分:1)

尝试xmltable或xmlquery。你必须声明defult和swif namesapce;


...
static Logger logger = LoggerFactory.getLogger(App.class);
...