У меня есть ошибка в функции MySQL? ОШИБКА Не разрешено возвращать набор результатов из функции - PullRequest
0 голосов
/ 13 апреля 2019

У меня ошибка в функции mysql.Я прикрепил свой код ниже здесь.

DELIMITER $$
CREATE FUNCTION CheckAccount6(ids INT)
RETURNS integer
BEGIN

DECLARE opening INT;
DECLARE a INT;

SET a = 0;

select q.invoice, q.timestamp, 
(select sum(o.totprice) from sp_orderdetails o where o.quotation_no = q.id) as amount
from sp_quotation q where q.cid = ids and q.invoice != '0'

UNION

select 0, t.timestamp, t.amount from sp_transactions t where t.cid = ids and t.status like 'Approved';

IF(invoice = 0) THEN
 a = a - amount;
ELSE
 a = a + amount;

return a;
END $$

1 Ответ

0 голосов
/ 15 апреля 2019

Если вы пишете запрос 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 $$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...