微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我调用一个应该调用我知道存在的数据的过程时,我总是得到零

如何解决当我调用一个应该调用我知道存在的数据的过程时,我总是得到零

我正在尝试在 MysqL 中编写一个存储过程,然后将其回调,并且我必须提交返回正确响应的过程的屏幕截图。用于存储过程的代码似乎工作正常(至少没有错误),但是当我运行 CALL 函数时,无论我为 @column3 输入哪个数字,它都会返回 0.00。我的讲师认为问题是在我在最顶部定义变量之前将 OUT 声明为 AmountDue,但我无法找到另一种方法来在没有 IN/OUT 约束的情况下在 CALL 函数中为 @column3 输入。显然,我对此很陌生,所以如果我遗漏了一些明显的东西,请原谅我......有人有任何想法吗?

此外,我不需要任何帮助来构建数据库添加表等等。数据库存在并正常运行。只需要存储过程和调用它的帮助。谢谢。

delimiter //

DROP PROCEDURE IF EXISTS GetAmountDue;

CREATE PROCEDURE GetAmountDue(IN order_num INT,OUT AmountDue DECIMAL(10,2))
BEGIN
DECLARE AmountDue DECIMAL(10,2) DEFAULT 0;

SELECT COST
INTO @AmountDue
FROM cake_shape
INNER JOIN ll_cakery.order
ON cake_shape.shape_id=order.shape_id
WHERE order_num=@order_num;

SELECT AmountDue;
END//

delimiter ;

CALL GetAmountDue('113',@AmountDue);
  • order_num 是具有单独的 3 字符整数数据值的列
  • cost 是一个包含单独的小数(10,2)数据值的列
  • cake_shape 是一张桌子
  • ll_cakery.order 是一张表(这不太正确,因为 MysqL一个命令 ORDER 所以我必须给出模式名称
  • shape_id 是一列,仅在连接过程中使用
  • 在 CALL 函数中,@order_num=113

解决方法

你传递的是字符串而不是整数

您不将第 3 列与第 1 列进行比较

最后,您必须使用从选择中获得的数据设置输出变量

最后永远不要像列名那样命名变量,这只会带来问题

CREATE tABLE table1 ( COST DECIMAL(19,2),column2 int,column3 int)
INSERT INTO table1 VALUES (10.2,1,1),(10.2,1)
CREATE TABLE table2 (column2 int)
INSERT INTO table2 VALUES (1)
CREATE PROCEDURE GetAmountDue(IN _column1 INT,OUT _AmountDue DECIMAL(10,2))
BEGIN


SELECT SUM(COST)
INTO @AmountDue
FROM table1
INNER JOIN table2
ON table1.column2=table2.column2
WHERE column3=_column1;

SET _AmountDue := @AmountDue;
END
CALL GetAmountDue(1,@AmountDue);
SELECT @AmountDue
| @AmountDue |
| ---------: |
|      20.40 |

dbfiddle here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。