【问题标题】:ORA-19279: XPTY0004 - XQuery dynamic type mismatch: expected singleton sequence - different caseORA-19279: XPTY0004 - XQuery 动态类型不匹配:预期的单例序列 - 不同的情况
【发布时间】:2015-08-21 09:45:34
【问题描述】:

我在尝试从 Oracle 中的 XML 文件中选择某些字段时遇到问题。

我收到以下错误:

ORA-19279:XPTY0004 - XQuery 动态类型不匹配:预期的单例序列 - 得到多项序列

XML 结构 是这样的:

<REC r_id_disclaimer="yyyyyyy">
   <UID>xxxxxxx</UID>
   <static_data>
   <keywords count="4">
       <keyword>Brain-</keyword>
       <keyword>Depres</keyword>
       <keyword>Acute</keyword>
       <keyword>Chine</keyword>
   </keywords>

我使用的查询如下:

select RecUid.CD_UID
     , Abst2.*
from testtable2 t
cross join  xmltable(xmlnamespaces(default 'http://scientific.thomsonreuters.com/schema/wok5.4/public/FullRecord'),
 'records/REC'
  passing t.xml_file 
  columns     CD_UID varchar2(200) path 'UID',
              --names xmltype path 'static_data/summary'
              Abstract xmltype path 'static_data/fullrecord_metadata'
            ) RecUid


cross join xmltable(xmlnamespaces(default 'http://scientific.thomsonreuters.com/schema/wok5.4/public/FullRecord'),
 'keywords/keywords'
  passing RecUid.Abstract

  columns     keyword varchar2(200) path 'keyword'
            ) as Abst2
    ;

我已阅读与同一错误相关的所有其他主题,但我找不到适合我的情况的解决方案。我试过了

columns     keyword varchar2(200) path 'keyword()'
or
columns     keyword varchar2(200) path 'keyword/text()'
or
columns     keyword varchar2(200) path '//*keyword()'
and
columns     keyword varchar2(200) path '/.keyword'

我们正在运行: Oracle Database 11g Enterprise Edition 11.2.0.4.0 64bit Production

谁能帮我找出错误?

谢谢!

【问题讨论】:

  • 上述 xml 的预期输出是什么?此外,您能否将示例 xml 更新为可用于运行查询的正确且有效的 xml? (例如, 没有结束标记,并且 sampl xml 中没有提及 ,但查询中有)
  • &lt;records&gt;&lt;REC r_id_disclaimer="yyyyyyy"&gt; &lt;UID&gt;xxxxxxx&lt;/UID&gt; &lt;static_data&gt; &lt;keywords count="4"&gt; &lt;keyword&gt;Brain-&lt;/keyword&gt; &lt;keyword&gt;Depres&lt;/keyword&gt; &lt;keyword&gt;Acute&lt;/keyword&gt; &lt;keyword&gt;Chine&lt;/keyword&gt; &lt;/keywords&gt; &lt;/rec&gt;&lt;/records&gt;
  • 预期输出为 2 列:CD_UID 和相关关键字

标签: xml oracle


【解决方案1】:

在大量调整您的 xml 数据并注释掉命名空间位(这使它不为我返回任何行)之后,我设法获得了我认为您所追求的输出:

with testtable2 as (select xmltype(
'<records>
  <REC r_id_disclaimer="yyyyyyy">
     <UID>xxxxxxx</UID>
     <static_data>
       <keywords count="4">
           <keyword>Brain</keyword>
           <keyword>Depres</keyword>
           <keyword>Acute</keyword>
           <keyword>Chine</keyword>
       </keywords>
     </static_data>
  </REC>
</records>') xml_file from dual)
select RecUid.CD_UID,
       Abst2.*
from   testtable2 t
       cross join xmltable(--xmlnamespaces(default 'http://scientific.thomsonreuters.com/schema/wok5.4/public/FullRecord'),
                           'records/REC'
                           passing t.xml_file 
                           columns CD_UID varchar2(200) path 'UID',
                                   --names xmltype path 'static_data/summary'
                                   Abstract xmltype path 'static_data/keywords'
                           ) RecUid
       cross join xmltable(--xmlnamespaces(default 'http://scientific.thomsonreuters.com/schema/wok5.4/public/FullRecord'),
                           'keywords/keyword'
                           passing RecUid.Abstract
                           columns keyword varchar2(200) path '.'
                           ) Abst2;

CD_UID               KEYWORD             
-------------------- --------------------
xxxxxxx              Brain               
xxxxxxx              Depres              
xxxxxxx              Acute               
xxxxxxx              Chine               

【讨论】:

    猜你喜欢
    • 2017-07-12
    • 2015-09-04
    • 2016-08-23
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多