错误消息ORA-19279:尝试在PL / SQL中创建XML文件视图时收到XPTY0004

时间:2017-07-05 13:34:01

标签: xml oracle plsql xquery

我正在尝试在Oracle PL / SQL中创建一些XML文件的视图。 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'
          );

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

更改为此。它很脆弱,不适用于&gt; 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]' 
);

答案 1 :(得分:2)

由于Item不止一次出现,因此应该使用第二个XMLTABLE操作来处理。这将给出项目内容的标准化视图。

请参阅https://livesql.oracle.com/apex/livesql/file/content_E8GUH32UJN0EDKXRSV30ZUX4V.html