2014-06-09 11 views
0

Les deux requêtes suivantes s'exécutent correctement sur eXist-db mais génèrent les erreurs suivantes sur le serveur MarkLogic. Toute aide appréciée.Erreurs MarkLogic xquery

Query:

for $cust in //Customer[@id=1011] 

for $ord in //Order[@Acct = $cust//Accounts//Account/@id/fn:string(.)] 

return $ord/OrdQty/@Cash 
return max($orderprice) 

Erreur:

[1,0 ml] XDMP-UNEXPECTED: (err: XPST0003) d'erreur de syntaxe jeton inattendu, Return_ inattendue, attente fin $ ou SemiColon_ Stack Trace

à la ligne 10 colonne 0: Dans xdmp: eval ("version xquery " " 1,0 ml; déclarer espace de noms html = ...",(), 13899855847338100900diff érents-tr ...) 8. 9. retour $ ord/OrdQty/@ Espèces 10. retour max (orderprice de $)


Requête:

for $cust in //Customer 

return <Customer> 
{$cust/@id} 

{$cust/Name} 

<Customer_Securities> 

{for $account in $cust/Accounts/Account 

return <Account BALANCE="{$account/Balance/OnlineActualBal}" 

ACCOUNT_ID="{$account/@id}"> 

<Securities> 

{$account/Holdings/Position/Name} 

</Securities> 

</Account> } 

</Customer_Securities> 

</Customer> 

Erreur:

[1.0-ml] XDMP-EXPNTREECACHEFULL: pour $ cust dans fn: collection()/descendant :: Retour du client {$ cust/@ id} {$ cust/Nom} {pour $ compte dans $ cust/Comptes/Compte return {$ compte/Holdings/Position/Nom}} - Cache arborescent étendu sur l'hôte gkomninos-pc.studentcom.c o.uk Trace de pile

A la ligne 3 colonne 0: Dans xdmp: eval ("version xquery " " 1,0 ml; html = espace de noms déclarer ... "(), 13899855847338100900different-tr ...) 1. Version XQuery "1,0 ml"; 2. espace de noms html = déclarer" http://www.w3.org/1999/xhtml « ; 3. pour $ Cust en// client 4. 5. retour

+0

Cela devrait être divisé en deux questions. Le deuxième peut déjà être répondu par http://stackoverflow.com/questions/14679746/avoiding-xdmp-expntreecachefull-and-loading-document – mblakele

+1

En fait, je suis sûr que votre première requête que vous avez posté ne fonctionnera pas dans eXist- db – adamretter

Répondre

2

pour la première erreur, qui peut être liée à une certaine marge de manœuvre supplémentaire fournie par la syntaxe eXist, mais le for ne devrait pas avoir deux return s (voir XQuery spec on FLWORs) (également $orderprice est non défini):

for $cust in //Customer[@id=1011] 
for $ord in //Order[@Acct = $cust//Accounts//Account/@id/fn:string(.) 
return ($ord/OrdQty/@Cash, max($orderprice)) 

La deuxième requête lève une exception car elle sélectionne trop de données pour tenir dans le cache de l'arborescence étendue. Cela dépendra du nombre de clients dans votre base de données. Est-il possible de sélectionner moins de clients (c'est-à-dire que ce rapport n'a besoin que de sélectionner ceux qui ont des soldes en souffrance, etc.)? Vous pouvez également générer votre rapport par lots pour éviter de remplir le cache.

Questions connexes