使用MarkLogic CoRB导出CSV时遇XDMP-UNEXPECTED错误求助
CoRB导出CSV时Process Query语法错误排查与修复
错误原因
你的Process Query触发XDMP-UNEXPECTED语法错误,核心问题是外部变量声明不符合XQuery规范:
你当前的变量声明写法:
declare variable $URI xs:string external;
正确的带类型外部变量声明必须使用as关键字指定类型,修正后的语法应为:
declare variable $URI as xs:string external;
缺少as关键字导致解析器无法识别类型声明逻辑,直接触发语法报错。
修复后的完整代码
优化后的Uri Query
原Uri Query中$count和$URI变量属于冗余代码,直接返回匹配的文档URI列表即可:
xquery version "1.0-ml"; let $dir := "/" return cts:uris((), (), cts:directory-query($dir, "infinity"))
修复并优化后的Process Query
除了修正变量声明,还可以将cts:search替换为更高效的doc($URI)(已知文档URI时无需通过全文搜索定位):
xquery version "1.0-ml"; declare variable $URI as xs:string external; let $elementNames := ("name", "address", "company", "emailAddress") let $doc := doc($URI)/customer let $textOutput := for $i in $elementNames return $doc/*[fn:name() = $i]/text() return fn:string-join($textOutput, ",")
额外优化建议
- 若字段值包含逗号,会导致CSV格式错乱,建议用双引号包裹字段值,可修改
return语句为:return fn:string-join(for $val in $textOutput return concat('"', fn:replace($val, '"', '""'), '"'), ",") - 如需添加CSV表头,可在CoRB配置中通过
PRE-BATCH-TASK执行一次表头输出逻辑,或在Process Query中判断是否为第一条记录时输出表头。
内容的提问来源于stack exchange,提问作者Niel
相关产品推荐
相关产品推荐

