2017-07-05 11 views
0

我想在Oracle中創建PL/SQL的XML文件的視圖。與該XML文件的數據內容的問題是,單個路徑常常具有多於一個的數據輸入,如下圖所示:錯誤消息ORA-19279:XPTY0004收到當試圖創建視圖,PL/SQL的XML文件

<priip> 
    <data> 
    <properties> 
     <priipMonitoringInterval>daily</priipMonitoringInterval> 
     <priipMonitoringStartDate>2017-06-30T13:51:03.168000</priipMonitoringStartDate> 
     <permittedKIDDownloadJurisdictions> 
     <item>DE</item> 
     <item>AT</item> 
     </permittedKIDDownloadJurisdictions> 
    </properties> 
    </data> 
</priip> 

我因此獲得其讀取的錯誤消息:

ORA -19279:XPTY0004 - XQuery的動態類型不匹配:預計單序列 - 得到了多項目序列

這裏,很顯然,問題在於路徑:

priip/data/properties/permittedKIDDownloadJurisdictions/item 

,我們有兩個允許的司法管轄區,DE和AT。我不能改變原始的XML文件,我需要將文件中的所有數據將被輸入到PL/SQL視圖。我附上了我的代碼示例,顯示了我已經嘗試過的內容。

create or replace view PRIIPS_XML_VIEW as 
    select * 
    from PRIIPS_XML t, 
     XMLTable(
     '$p/priip/data' 
     passing t.SYS_NC_ROWINFO$ as "p" 

     columns 
      priip_monitoring_interval varchar2(20) path 'properties/priipMonitoringInterval', 
      priip_monitoring_start_date varchar2(26) path 'properties/priipMonitoringStartDate', 
      kid_download_jurisdiction varchar2(10) path 'properties/permittedKIDDownloadJurisdictions/item' 
     ); 

任何幫助將不勝感激!

+0

請編輯您的XML示例以使其完整有效。 – OldProgrammer

+0

我已經這樣做了 - 但爲了簡便起見,我已經排除太多的文件的其他內容的。 –

+0

那麼你不能有兩個元素映射到一個行/像列。你以某種方式需要「扁平」數據。項目元素的數量是否總是少於兩個?另一種可能的解決方法是使用xQuery – OldProgrammer

回答

2

改變了這一點。它是脆弱的,不會爲> 2個元素,在這種情況下,你將要使用XQuery做一些更復雜的東西的工作:由於項目多次發生,應該用一個來處理更

create or replace view PRIIPS_XML_VIEW as 
    select * 
    from PRIIPS_XML t, 
     XMLTable(
     '$p/priip/data' 
     passing t.SYS_NC_ROWINFO$ as "p" 

     columns 
      priip_monitoring_interval varchar2(20) path 'properties/priipMonitoringInterval', 
      priip_monitoring_start_date varchar2(26) path 'properties/priipMonitoringStartDate', 
      kid_download_jurisdiction varchar2(10) path  
kid_download_jurisdiction1 varchar2(10) path 'properties/permittedKIDDownloadJurisdictions/item[1]', 
      kid_download_jurisdiction2 varchar2(10) path 'properties/permittedKIDDownloadJurisdictions/item[2]' 
); 
+0

謝謝 - 這確實適用於2個司法管轄區。 –

+0

更新(10/07/17) - 需要添加2個以上的司法管轄區,並且我發現實施此方法也適用於此問題(儘管您在回答@OldProgrammer中提出了警告)。 –

相關問題