我发现您必须使用 xdmp:eval() 函数在不同的事务中运行这些命令中的每一个。执行以下操作将起作用。
let $deleteCommand := "declare variable $directory as xs:string external; xdmp:directory-delete($directory)"
let $createCommand := "declare variable $directory as xs:string external; xdmp:directory-create($directory)"
let $_ := xdmp:eval($deleteCommand, (xs:QName("directory"), $directory),<options xmlns="xdmp:eval"><isolation>different-transaction</isolation><prevent-deadlocks>false</prevent-deadlocks></options>)
let $_ := xdmp:eval($createCommand, (xs:QName("directory"), $directory),<options xmlns="xdmp:eval"><isolation>different-transaction</isolation><prevent-deadlocks>false</prevent-deadlocks></options>)
return $_
在 eval 中运行其中一个命令并调用另一个命令不起作用,因为这会产生死锁。
尽管有这个答案,但我仍然对删除目录内容(如果有人有的话)的解决方案感兴趣。