首页 > 解决方案 > xdmp:invoke-function 中的多语句对使用的分号给出错误

问题描述

我尝试在内部使用多语句xdmp:invoke-function,但失败并出现以下错误:

XDMP-BADSEMISEP: (err:XPST0003) 在 XQuery 中,分号不是语句分隔符所必需的。您的意思是使用“,”吗?

产生上述错误的代码:

let $content := <poem>Johny Johny Yes Papa ! Eating sugar No Papa !</poem>
  return
    xdmp:invoke-function(
      function() {xdmp:document-insert("/poem2.xml",$content);
                 fn:doc("/poem2.xml"),
                 xdmp:commit() },
      <options xmlns="xdmp:eval">
        <transaction-mode>update</transaction-mode>
      </options>)

那么,如何在里面运行多语句查询xdmp:invoke-function呢?

标签: transactionsmarklogicinvoke

解决方案


If you really want to invoke your code as multi-statement, you could use xdmp:invoke and invoke a multi-statement module in your modules database.

Alternatively, if you do not transform your document while inserting, you could return your $content instead of fetching it again.

let $content := <poem>Johny Johny Yes Papa ! Eating sugar No Papa !</poem>
return xdmp:invoke-function(function() {
  let $x := xdmp:document-insert("/poem2.xml",$content)
  return $content
}) 

推荐阅读