在Marklogic中解决XDMP-DBDUPURI导致XDMP-MULTIDBSTMT

时间:2018-06-21 10:59:55

标签: xml xquery marklogic

我正在尝试从数据库中删除文档,但出现以下错误-

XDMP-DBDUPURI: xdmp:document-delete("/test/abc.xml") -- URI 
/test/abc.xml found in forests forest-1 and forest-2

当我尝试使用下面的代码来解决它时-

xquery version "1.0-ml";
let $doc := "/test/abc.xml"
let $forest-name := "forest-1"
let $query :=
    'xquery version "1.0-ml";
     declare variable $URI as xs:string external;
     xdmp:document-delete($URI)'
let $options := <options xmlns="xdmp:eval"><database>{xdmp:forest($forest-name)}</database></options>
return xdmp:eval($query,(xs:QName("URI"),$doc),$options)

我收到如下错误-

XDMP-MULTIDBSTMT: xdmp:invoke("/MarkLogic/cpf/actions/failure-action.xqy", 
(xs:QName("trgr:uri"), "/test/abc.xml", xs:QName("trgr:trigger"), ...), 
<options xmlns="xdmp:eval"><isolation>same-statement</isolation><prevent-
deadlocks>...</prevent-deadlocks>...</options>) -- Cannot process different-
database requests with same-statement isolation

是否有解决此问题的建议?

1 个答案:

答案 0 :(得分:4)

在某些情况下,xdmp:eval可以默认为isolation same-transaction,尽管似乎没有记录在案。您需要将different-transaction明确指定为isolation选项。例如:

<options xmlns="xdmp:eval">
  <isolation>different-transaction</isolation>
  <database>{xdmp:forest($forest-name)}</database>
</options>

HTH!