2013-12-24 75 views
4

我有一個腳本,用於查詢數據庫中的訂單信息,然後查詢該查詢以獲取訂單總計。代碼看起來像這樣。查詢查詢運行時錯誤。不能在非數字類型上應用二進制數字運算符[* | /]

<!--- Retrieve order information from database ---> 
<CFQUERY NAME="GetOrder"> 
    SELECT 
    oi.OrderQty, oi.ItemPrice 
    FROM 
    Orders o, 
    OrderItems oi, 
    WHERE 
    o.ID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#ATTRIBUTES.OrderID#"> 
    AND o.ID = oi.OrderID 
</CFQUERY> 

<!--- Query the GetOrders query to find total $$ ---> 
<CFQUERY DBTYPE="Query" NAME="GetTotal"> 
    SELECT SUM(ItemPrice * OrderQty) AS OrderTotal 
    FROM GetOrder 
</CFQUERY> 

數據庫中的itemPrice和OrderQty字段都設置爲數字數據類型。出於某種原因,當我運行該腳本時,出現錯誤「Query Of Queries runtime error。無法在非數字類型上應用二進制數字運算符[* | /]」

我甚至運行了快速檢查在查詢中數字是數字,並在查詢查詢之前中止腳本。我跑的支票看起來像這樣。

<cfoutput> 
<cfif isnumeric(GetOrder.OrderQty)>1<cfelse>0</cfif> 
<cfif isnumeric(GetOrder.ItemPrice)>1<cfelse>0</cfif> 
<cfabort> 
</cfoutput> 

的cfifs的兩個結果回來爲「1」

任何幫助,將不勝感激。

+1

您的測試僅測試查詢中的第一行,後續行可能導致問題。 –

回答

2

忘記查詢查詢和cfloop查詢來做同樣的事情,最好使用precisionEvaluate()來避免浮點舍入錯誤。

<cfset orderTotal = 0> 
<cfloop query="GetOrder"> 
    <cfset orderTotal = precisionEvaluate(orderTotal + (ItemPrice * OrderQty))> 
</cfloop> 

爲什麼它沒有工作可能是因爲一些事情。也許你的數據庫驅動沒有返回正確的sql類型。

isnumeric代碼只測試字符串是否爲數字,而不是查詢對象中該字符串的內部表示。

相關問題