Если вы пишете запрос SELECT
в функции или процедуре, не присваивая результат переменной, он пытается вернуть его.Это разрешено для процедур, потому что они могут использоваться в качестве запроса, и результат запроса SELECT
становится результатом CALL procedurename
.
Но функция может просто возвращать одно значение, а ненабор результатов запроса.Если вы используете запрос в функции, он должен сохранять результаты в переменных, а затем использовать их для вычисления возвращаемого значения функции.Если вам нужно обработать все строки набора результатов, он должен использовать курсор.
Поскольку вы просто хотите вернуть сумму, вы можете использовать SUM()
в запросе и вернуть ее.Там нет необходимости для каких-либо переменных или циклов.
DELIMITER $$
CREATE FUNCTION CheckAccount6(ids INT)
RETURNS integer
BEGIN
RETURN (SELECT SUM(o.totprice)
FROM sp_orderdetails AS o
JOIN sp_quotation AS q ON o.quotation_no = q.id
WHERE q.cid = ids AND q.invoice != '0')
-
(SELECT SUM(t.amount)
FROM sp_transactions t
WHERE t.cid = ids and t.status like 'Approved');
END $$