首页 > 解决方案 > 我的mysql函数有错误?ERROR 不允许从函数返回结果集

问题描述

我在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 $$

标签: mysqlfunction

解决方案


如果您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 $$

推荐阅读