Ошибка выполнения 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 Код только проверяет, является ли строка числовой, а не внутренним представлением этой строки в объекте запроса.

Другие вопросы по тегам