Ошибка выполнения Query Of Queries. Невозможно применить двоичный числовой оператор [*|/] к нечисловому типу
У меня есть скрипт, который запрашивает в базе данных информацию о заказе, а затем запрос этого запроса, чтобы получить итоговые суммы заказа. Код выглядит так.
<!--- 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. Невозможно применить двоичный числовой оператор [*|/] к нечисловому типу"
Я даже провел быструю проверку, чтобы увидеть, были ли числа числовыми в запросе, и прервал сценарий перед запросом запросов. Проверка, которую я провел, выглядит следующим образом.
<cfoutput>
<cfif isnumeric(GetOrder.OrderQty)>1<cfelse>0</cfif>
<cfif isnumeric(GetOrder.ItemPrice)>1<cfelse>0</cfif>
<cfabort>
</cfoutput>
Оба результата cfifs вернулись как "1"
Любая помощь с этим будет принята с благодарностью.
1 ответ
Забудьте Query of Queries и cfloop вашего запроса, чтобы сделать то же самое, предпочтительно используя precisionEvaluate()
чтобы избежать ошибки округления с плавающей запятой.
<cfset orderTotal = 0>
<cfloop query="GetOrder">
<cfset orderTotal = precisionEvaluate(orderTotal + (ItemPrice * OrderQty))>
</cfloop>
Почему это не сработало, может быть из-за ряда вещей. Возможно, ваш драйвер БД не вернул правильный тип sql.
isnumeric
Код только проверяет, является ли строка числовой, а не внутренним представлением этой строки в объекте запроса.