XQuery动态类型不匹配

时间:2018-04-16 13:57:42

标签: xml oracle

我正在尝试运行以下代码:

with example(yourdata) as (  
select a.XMLRECORD from "FBNK_EB_CONTRACT_BA001" a)  
select row_id,amount,amtval from example,  
    xmltable(  
        'for $r in /row  
            let $rowid := $r/@id  
            for $c2 in $r/c2  
                let $m2 := $c2/@m  
                let $c5 := $r/c5[@m=$m2]  
                where exists($c5)  
                    return <amt> {$rowid} {$c2} {$c5} </amt>'  
    passing yourdata  
    columns  
        row_id varchar2(30)  PATH '@id',  
        amount varchar2(30) path 'c2',  
        amtval varchar2(30) path 'c5'  
    ) where amount IN ('CURACCOUNT','DUEACCOUNT')  

但是,我收到以下错误:

ORA-19279:XPTY0004 - XQuery动态类型不匹配:预期的单例序列 - 得到多项序列 19279. 00000 - “XQuery动态类型不匹配:预期的单例序列 - 得到多项序列” *原因:传入的XQuery序列有多个项目。 *操作:更正XQuery表达式以返回单个项目序列。

select a.XMLRECORD from "FBNK_EB_CONTRACT_BA001" a返回的数据如下:

<row id="123456">

   <c1>USD</c1>

   <c2>AMOUNTS</c2>

   <c2 m="2">AMOUNT1</c2>

   <c2 m="3">AMOUNT2</c2>

   <c2 m="4">AMOUNT3</c2>

   <c2 m="5">AMOUNT4</c2>

   <c3 m="6" />

   <c4 m="7" />

   <c5>50000000</c5>

   <c5 m="2">2000000</c5>

   <c5 m="3">15000000</c5>

   <c5 m="4">2000000</c5>

   <c5 m="5">538773.07</c5>

    ....

    ....

</row>
<row id="789012">

   <c1>USD</c1>

   <c2>AMOUNTS</c2>

   <c2 m="2">AMOUNT1</c2>

   <c2 m="3">AMOUNT2</c2>

   <c2 m="4">AMOUNT3</c2>

   <c2 m="5">AMOUNT4</c2>

   <c3 m="6" />

   <c4 m="7" />

   <c5>50000000</c5>

   <c5 m="2">2700000</c5>

   <c5 m="3">14000</c5>

   <c5 m="4">2004500</c5>

   <c5 m="5">538776</c5>

    ....

    ....

</row>

1 个答案:

答案 0 :(得分:0)

正如错误消息所示,您的一个选择会返回多个元素。

您必须检查完整的XML文件以查看问题所在。

问题的一个可能原因是此类数据

   <c5 m="5">538773.07</c5>
   <c5 m="5">999999.07</c5>

请注意重复的属性m

要检查是否是这种情况,只需考虑第二个元素,只需更新let语句 - 添加[2]

 let $c5 := $r/c5[@m=$m2][2] 

如果XQUERY返回了某些内容 - 您会立即看到哪个ID错误。如果得到或得到结果,请类似地检查c2

同样奇怪 - 在您的示例数据中,元素row似乎不是您在XQUERY for $r in /row中处理的根元素;但这可能是错字......