我在mysql函数中有错误?不允许ERROR从函数返回结果集

时间:2019-04-13 08:25:16

标签: mysql function

我在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 :(得分:0)

如果您在函数或过程中编写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 $$