当为可选的外部参数传递“()” [空序列]时,“ xdmp:eval”抛出“ XDMP-ARG:-vars无效”异常

Ash*_*til 0 marklogic marklogic-8 marklogic-9

以下是其中$p2的一个示例代码optional external parameter(即带有? modifier);传递给XDMP-ARG: -- vars is invalid时,代码会给出异常。empty sequence-()$p2

试穿了 Marklogic 8 & 9

let $query := 
"
declare variable $p1 as node()? external;
declare variable $p2 as node()? external;
(
if($p1) then xdmp:log('P1') else ()
,
if($p2) then xdmp:log('P2') else ()
)

"
let $p1 := <p></p>
let $p2 := ()
return 
xdmp:eval(
          $query,
          (xs:QName('p1'), $p1, xs:QName('p2'), $p2)
         )
Run Code Online (Sandbox Code Playgroud)

我希望代码能够运行并打印日志。我可以深入了解异常的发生方式吗?

grt*_*tjn 5

如果将vars作为key,val,key,val的序列传递,则它必须是偶数(2的倍数)。您不能像这样嵌入序列,因为嵌套序列会在XQuery中自动变平。使用map:map传入您的var:

map:new((
  map:entry("p1", $p1),
  map:entry("p2", $p2),
))
Run Code Online (Sandbox Code Playgroud)

HTH!