2016-11-07 20 views
0

xmlexistsを持つwhere句に名前空間を統合する方法の問題を抱えています。クエリーは以下の通りである:xmlexists with Oracleのネームスペース

SELECT sing_d1.sing_info_text1, sing_d1.sing_info_text2 
FROM XMLTABLE(
     xmlnamespaces (
         'http://www.abccompany.com/Canonical' AS "abc", 
         'http://abccompany.com/PmtInfo' AS "pmt", 
         'http://abccompany.com/CommonTypes' AS "cmn", 
         'http://www.w3.org/2001/XMLSchema-instance' AS "xsi"), 
        '/abc:abc/abc:Pmt/pmt:Payments/pmt:PayInfo/pmt:Single/pmt:SingAddInfo' 
        PASSING payXml 
        COLUMNS 
            sing_info_type VARCHAR2(4000) 
            PATH 'cmn:AddInfoCmpType', 
            sing_info_text1 VARCHAR2(4000) 
            PATH 'cmn:AddInfoCmpText[1]', 
            sing_info_text2 VARCHAR2(4000) 
            PATH 'cmn:AddInfoCmpText[2]' 
      )sing_d1 
WHERE 
         XMLExists(

        '/abc:abc/abc:Pmt/pmt:Payments/pmt:PayInfo/pmt:Single/pmt:SingAddInfo[AddInfoCmpType = "IATCode"]' 

); 

任意の手がかりが高く評価されるだろう。

+0

「WHERE sing_info_type = 'IATCode''」と書くのは簡単でしょうか? –

答えて

1
XMLExists(' declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance"; 
       declare namespace abc="http://www.abccompany.com/Canonical"; 
         declare namespace pmt="http://abccompany.com/PmtInfo"; 
         declare namespace cmn="http://abccompany.com/CommonTypes"; 
          /abc:abc/abc:Pmt/pmt:Payments/pmt:PayInfo/pmt:Single/pmt:SingAddInfo[AddInfoCmpType = "IATCode"]' passing payXml) 

xmlns(デフォルト)の場合、declare default element namespace "http.url.url"を使用してください。その他の場合declare namespace xyz

+0

ありがとうAL。しかし今は手続き中のコードがFAILで失敗しています:その他errorORA-19228:XPST0008 - 宣言されていない識別子:接頭辞 '。'ローカル名 ''。 – QuickDrawMcgraw

+0

が編集されました。今すぐやってみて下さい。 –

+0

私は何を考えていたのか分かりません。私は実際に選択の前にxmlexists機能を使用する必要があります。xmlexistsでWhere句が原因で、タグがxmlにない場合はno_data_foundで選択に失敗します。 SELECT文に入る前にデータが存在するかどうかを確認するために、xmlexistsをIF節とともに使用できますか? – QuickDrawMcgraw