我想在xquery中创建一个计数器.我最初的尝试看起来如下:
let $count := 0
for $prod in $collection
let $count := $count + 1
return
<counter>{$count }</counter>
Run Code Online (Sandbox Code Playgroud)
预期结果:
<counter>1</counter>
<counter>2</counter>
<counter>3</counter>
Run Code Online (Sandbox Code Playgroud)
实际结果:
<counter>1</counter>
<counter>1</counter>
<counter>1</counter>
Run Code Online (Sandbox Code Playgroud)
该$count变量或者未能更新或处于复位状态.为什么我不能重新分配现有变量?什么是获得理想结果的更好方法?
我有这样的XML文档.
<Authors>
<Author>
<name>R.N Tagore</name>
<book>Gitanjli</book>
</Author>
<Author>
<name>Premchand</name>
<book>Panch Parameshvar</book>
</Author>
<Author>
<name>H.R Bacchan</name>
<book>Madhushala</book>
</Author>
<Author>
<name>Premchand</name>
<book>Gaban</book>
</Author>
<Author>
<name>Premchand</name>
<book>Nirmala</book>
</Author>
<Author>
<name>Premchand</name>
<book>Nirmala</book>
</Author>
</Authors>
Run Code Online (Sandbox Code Playgroud)
从上面的XML我需要不同的作者姓名列表.
为此我可以写一个像这样的查询,
fn:distinct-values(cts:search(fn:doc()//pa:Author/pa:name,cts:and-query(())))
Run Code Online (Sandbox Code Playgroud)
上面的代码将做的是,它将获得作者名称的结果,然后fn:distinct-values()函数将从该结果集中过滤不同的作者名称.对于当前场景,它将正常工作,因为XML中的数据仅为6,但是当数据非常高时,请说50个lac
cts:search(fn:doc()//pa:Author/pa:name,cts:and-query(()))
Run Code Online (Sandbox Code Playgroud)
上面的查询部分将给出XDMP-EXPNTREECACHEFULL异常,因为我们试图在内存中缓存50个lac的元素.
因此,需要您的帮助才能通过使用cts:search或search:search API 来获取不同的作者姓名.我不想先得到结果集,然后使用fn:distinct-values()从该结果集中提取不同的记录.
谢谢,