我正在尝试运行以下代码:
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>
答案 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
中处理的根元素;但这可能是错字......