2014-06-09 72 views
0

以下兩個查詢在eXist-db上運行良好,但在MarkLogic服務器上產生以下錯誤。任何幫助讚賞。MarkLogic xquery錯誤

查詢:

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

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

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

錯誤:

[1.0毫升] XDMP-意外:(ERR:XPST0003)意外的標記語法錯誤,意想不到Return_,期待$結尾或SemiColon_ 堆棧跟蹤

在管線10列0: 在xdmp:EVAL( 「版本的XQuery 1.0 "毫升"; 聲明命名空間的html = ...」,(),13899855847338100900diff erent-TR ...) 8. 9.返回$ ORD/OrdQty/@現金 10.最大的回報($ orderprice)


查詢:

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> 

錯誤:

[1.0-ml] XDMP-EXPNTREECACHEFULL:用於$ cust中的fn:collection()/ descendant ::用戶返回{$ cust/@ id} {$ cust/Name} {用於$賬戶中的$ cust/Accounts/Account返回{$賬戶/集團/位置/名稱}} - 主機上展開的樹緩存完整gkomninos-pc.studentcom.c o.uk 堆棧跟蹤

在第3行第0列: 在xdmp:EVAL(「版本的XQuery 1.0 "毫升"; declare namespace html = ...「,(),13899855847338100900different-tr ...) 1. xquery version」1.0-ml「; 2. declare namespace html =」http://www.w3.org/1999/xhtml「; 3. for $ cust in//客戶 4. 5.返回

+0

這應該分成兩個問題。第二個可能已經回答了http://stackoverflow.com/questions/14679746/avoiding-xdmp-expntreecachefull-and-loading-document – mblakele

+1

其實我非常確定你的第一個查詢發佈它不會運行在eXist- D b – adamretter

回答

2

對於第一個誤差,即可能與由eXist中提供了一些額外語法餘地;然而,for不應有兩個return S(參見XQuery spec on FLWORs)(也$orderprice是未定義):

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

第二個查詢是拋出一個異常,因爲它選擇了太多的數據以適應擴展樹緩存。這將取決於數據庫中的客戶數量。是否有可能選擇較少的客戶(即:也許這份報告只需要選擇那些過期餘額等)?或者,您可以批量生成報告以避免填充緩存。