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