ML8 中的多语句变量
Multi statement variables in ML8
我正在尝试以分号作为语句分隔符来执行多语句事务。我的脚本中有外部变量,这些只能在多步中的第一条语句中访问。对于第二条语句 xdmp:document-add-properties
我得到 XDMP-UNEXPECTED
.. 以下是我的代码
let $sub-query := 'xquery version "1.0-ml";
declare option xdmp:transaction-mode "update";
declare variable $newDocUri external;
declare variable $transformed_annotations external;
declare variable $uri external;
declare variable $app external;
declare variable $id external;
xdmp:document-insert($newDocUri, $transformed_annotations,(xdmp:default-permissions()), ("annotated", "termite", $app));
xdmp:document-add-properties($newDocUri, (<document-parent-location>{$uri}</document-parent-location>,
<context>{$app}</context>,
<id>{$id}</id>))
xdmp:commit()
'
let $_ := xdmp:eval($sub-query, (
xs:QName("newDocUri"),$newDocUri,
xs:QName("transformed_annotations"), $transformed_annotations,
xs:QName("uri"), $uri,
xs:QName("app"), $app,
xs:QName("id"), $id
), <options xmlns="xdmp:eval">
<isolation>different-transaction</isolation>
</options>)
在您的第二个(以及任何未来的后续)语句中,您需要重新声明 XQuery prolog,包括您在该查询中需要的任何外部变量声明。
您可以考虑将每个语句放在一个单独的模块中,并从主模块调用这些语句,通过 xdmp:invoke()
.
传递外部变量
希望对您有所帮助,
我正在尝试以分号作为语句分隔符来执行多语句事务。我的脚本中有外部变量,这些只能在多步中的第一条语句中访问。对于第二条语句 xdmp:document-add-properties
我得到 XDMP-UNEXPECTED
.. 以下是我的代码
let $sub-query := 'xquery version "1.0-ml";
declare option xdmp:transaction-mode "update";
declare variable $newDocUri external;
declare variable $transformed_annotations external;
declare variable $uri external;
declare variable $app external;
declare variable $id external;
xdmp:document-insert($newDocUri, $transformed_annotations,(xdmp:default-permissions()), ("annotated", "termite", $app));
xdmp:document-add-properties($newDocUri, (<document-parent-location>{$uri}</document-parent-location>,
<context>{$app}</context>,
<id>{$id}</id>))
xdmp:commit()
'
let $_ := xdmp:eval($sub-query, (
xs:QName("newDocUri"),$newDocUri,
xs:QName("transformed_annotations"), $transformed_annotations,
xs:QName("uri"), $uri,
xs:QName("app"), $app,
xs:QName("id"), $id
), <options xmlns="xdmp:eval">
<isolation>different-transaction</isolation>
</options>)
在您的第二个(以及任何未来的后续)语句中,您需要重新声明 XQuery prolog,包括您在该查询中需要的任何外部变量声明。
您可以考虑将每个语句放在一个单独的模块中,并从主模块调用这些语句,通过 xdmp:invoke()
.
希望对您有所帮助,