mysql - 我的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 $$
解决方案
如果您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 $$
推荐阅读
- c# - Entity Framework Core:同时更新多对多和基础模型
- reactjs - 警告:`input` 上的 `value` 属性不应为空。考虑使用空字符串来清除组件或 `undefined` 用于不受控制的组件
- ruby-on-rails - 提交表单后,从 Rails 控制器调用模式
- php - 如果所有变体都缺货,则从目录中隐藏 WooCommerce 可变产品
- svg - SVG 中的 Google 字体 src url
- ios - CollectionView 单元中的 Swift CollectionView 单元 - 呈现新的视图控制器
- typescript - typeorm 错误:列中的空值违反非空值:在 fk 中允许空值
- python - Marshmallow - 添加参数以包含子实体
- python - 如何让不和谐机器人找到并移动到特定用户的当前语音频道
- python - 不和谐.py | 加入公会时如何让bot标签成为公会的所有者?