2017-03-06 12 views
1

Oracle 12cデータベースにXML型の列を含む表があり、この列から値を抽出する必要があります。ここ このコラムの内容の例: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:ヘッダー/ b:Original_Swift'、 'xmlns:b =" urn:abc/scl/SWIFT "')AS "Extracted" " –

+0

はい、可能です。しかし、オラクルは 'extractvalue'を非推奨とし、' xmltable'と 'xmlquery'の使用を推奨しています。 [確認のメモ](https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions061.htm#SQLRF06173) –

+0

これについてはわかりませんでした。情報をありがとう! –

関連する問題