【问题标题】:How to extract XML Value in Oracle Database [duplicate]如何在 Oracle 数据库中提取 XML 值 [重复]
【发布时间】:2017-07-26 10:19:58
【问题描述】:

我在 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>

我需要检索&lt;swif:Original_Swift&gt; 的值。我试过函数 EXTRACT(xml_column, '/AbcMsg/Msg/Pmnt') 但它一直返回 null。

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

提前致谢。

【问题讨论】:

  • 我用不同的方法解决了这个问题,使用了其他功能。但您可以将其保留为重复项。

标签: sql xml oracle


【解决方案1】:

试试 xmltable 或 xmlquery。您必须声明 defult 和 swif 命名空间;

 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));

【讨论】:

  • 我能够使用 EXTRACTVALUE 函数执行我想要的操作:EXTRACTVALUE(xml_column, '//b:Header/b:Original_Swift', 'xmlns:b="urn:abc/scl/SWIFT"') AS "Extracted"
  • 是的,这是可能的。但 oracle 将extractvalue 标记为已弃用,建议使用xmltablexmlquerycheck note
  • 不知道。非常感谢您提供的信息!
猜你喜欢
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2022-07-21
  • 2012-11-16
  • 1970-01-01
  • 2021-03-27
相关资源
最近更新 更多