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

I keep getting zeros when I call a procedure that should be calling data I know exists

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

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

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);

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

您没有将第 3 列与第 1 列进行比较

最后,您必须使用从 select

获得的数据设置输出变量

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

CREATE tABLE table1 ( COST DECIMAL(19,2),column2 int, column3 int)
INSERT INTO table1 VALUES (10.2,1,1),(10.2,1,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 |

db<>fiddle here