Сгенерирована ошибка: XDMP-UNEXPECTED: (ошибка: XPST0003) Неожиданная синтаксическая ошибка токена, неожиданный For_, ожидающий Order_ или Return_ или Stable_ - PullRequest
2 голосов
/ 06 января 2020

После запуска приведенного ниже кода в qconsole Marklogi c появляется ошибка ниже

XDMP-UNEXPECTED: (ошибка: XPST0003) Неожиданная синтаксическая ошибка токена, неожиданный For_, ожидающий Order_ или Return_ или Stable_

let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
where $prices/priceList/prod[@num=$order/item/@num]
for $kk in $prices/priceList/prod[@num=$order/item/@num]
return 
<item>
{$kk}
</item>

Спасибо ..

Ответы [ 2 ]

5 голосов
/ 06 января 2020

Нет необходимости в XQuery 3 для этого. Просто добавьте дополнительные return между where и следующими for:

let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
where $prices/priceList/prod[@num=$order/item/@num]
return
for $kk in $prices/priceList/prod[@num=$order/item/@num]
return 
<item>
{$kk}
</item>

Чтобы следовать превосходному совету Майкла и оптимизировать для возврата полных предметов, я бы перевернул XPath, и Возврат детали заказа напрямую. Что-то вроде:

let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
for $item in $order/item
where $prices/priceList/prod[@num = $item/@num]
return
    $item

Или даже короче:

let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
return
    $order/item[@num = $prices/priceList/prod/@num]

HTH!

1 голос
/ 06 января 2020

В XQuery 1.0 никакие дополнительные предложения for не допускаются после предложения where. В Marklogi c может потребоваться префикс строки запроса с объявлением версии 3.0:

xquery version "3.0";
...