MarkLogic-XQuery语句的顺序处理

MarkLogic-XQuery语句的顺序处理,marklogic,marklogic-9,marklogic-dhf,Marklogic,Marklogic 9,Marklogic Dhf,我在代码下面运行,希望insert-after函数在insert-before函数之后执行(至少有2000毫秒的间隔),因为我的理解是XQuery将按顺序执行语句。但是,在运行代码之后,我看到由这两个函数创建的两个文档(/content/testbefore.xml和/content/testafter.xml)都具有与毫秒匹配的精确时间戳值 如何让语句按顺序执行 xquery version "1.0-ml"; declare function local:insert-before()

我在代码下面运行,希望
insert-after
函数在
insert-before
函数之后执行(至少有2000毫秒的间隔),因为我的理解是XQuery将按顺序执行语句。但是,在运行代码之后,我看到由这两个函数创建的两个文档(/content/testbefore.xml和/content/testafter.xml)都具有与毫秒匹配的精确时间戳值

如何让语句按顺序执行

xquery version "1.0-ml";

declare function local:insert-before()
  {
  let $contents :=
    <book>
      <bookTitle>All About George</bookTitle>
      <tstmp>{fn:current-dateTime()}</tstmp>
      <chapter1>
        <chapterTitle>Curious George</chapterTitle>
      </chapter1>
   </book>
  return xdmp:document-insert("/content/testbefore.xml", $contents)
};

declare function local:insert-after()
{
let $contents :=
  <after>
    <bookTitle>All About George</bookTitle>
    <tstmp>{fn:current-dateTime()}</tstmp>
    <chapter1>
      <chapterTitle>Curious George</chapterTitle>
    </chapter1>
 </after>
 return xdmp:document-insert("/content/testafter.xml", $contents)
};

local:insert-before(),
xdmp:commit(),
xdmp:sleep(2000),
local:insert-after();
xquery版本“1.0-ml”;
声明函数local:insert-before()
{
让$contents:=
关于乔治的一切
{fn:current-dateTime()}
好奇猴乔治
返回xdmp:documentinsert(“/content/testbefore.xml”,$contents)
};
声明函数local:insert-after()
{
让$contents:=
关于乔治的一切
{fn:current-dateTime()}
好奇猴乔治
返回xdmp:documentinsert(“/content/testafter.xml”,$contents)
};
本地:在()之前插入-before,
xdmp:commit(),
xdmp:睡眠(2000年),
局部:在()之后插入-;

语句按该顺序执行,但所有内容都在同一快照中提交到数据库

是,并且将始终在同一事务中返回一致的答案

[定义]如果显式参数和隐式参数相同,则保证在单个执行范围内重复调用产生相同结果的函数称为确定性函数

您可以使用,它将返回自开始处理查询以来经过的时间的
xs:dayTimeDuration
,并将其添加到
fn:currentDateTime()
值:

<tstmp>{fn:current-dateTime() + xdmp:elapsed-time()}</tstmp>
{fn:current-dateTime()+xdmp:appeased-time()}