2016-11-07 1 views
0

xmlexists가있는 where 절에 네임 스페이스를 통합하는 방법을 알아내는 데 문제가 있습니다. 쿼리는 다음과 같습니다.Oracle에서 네임 스페이스가있는 xmlexists

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

'어디에서 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로 선택에 실패합니다. xmlexists를 IF 절과 함께 사용하여 select에 들어가기 전에 데이터가 존재하는지 확인할 수 있습니까? – QuickDrawMcgraw

관련 문제