我正在使用 XQUERY,我在数据库中保存了 25000 条记录,我想以块(1000)的形式选择这些记录,如何递归获取记录?
问问题
251 次
1 回答
1
窗口查询</h2>
您可以为此目的使用翻滚窗口,遗憾的是许多 XQuery 引擎还不支持它。
对于以下建议,您必须将结果包装到 XML 中,因为 XQuery 只知道平面序列,不知道嵌套序列。
建造自己的翻滚窗户
您可以构建自己的翻滚窗口函数,看起来像这样,它创建$count
每个包含“项目”元素的“窗口”元素:
declare function local:window($seq as item()*, $size as xs:integer) as item()* {
for $i in 1 to xs:integer(fn:ceiling(count($seq) div $size))
return
element {"window"} {
for $j in (($i - 1) * $size + 1) to $i*$size
return
element {"item"} {$seq[$j]}
}
};
local:window((2, 4, 6, 8, 10, 12, 14), 3)
递归窗口的拆分序列
如果你想递归地解决这个问题,你将需要一些 split 函数,遗憾的是在标准 xquery 中不可用。您可以使用$n=1000
, 使用“头”元素并使用“尾”递归调用您的“工作函数”。
declare function local:split($seq as item()*, $n as xs:integer) as element()* {
(
element {"head"} {
for $i in subsequence($seq, 1, $n)
return element {"item"} {$i}
},
element {"tail"} {
for $i in subsequence($seq, $n+1)
return element {"item"} {$i}
}
)
};
local:split((2, 4, 6, 8, 10, 12, 14), 3)
要将尾部元素作为序列访问,请使用
local:split((2, 4, 6, 8, 10, 12, 14), 3)[2]//item/data()
于 2012-05-28T07:55:46.643 回答