MySQL存储过程返回错误的值

时间:2016-04-19 17:54:31

标签: mysql sql stored-procedures

我是MySQL存储过程的新手,我正在学习如何使用它们的一些教程,但我遇到了一个有趣的事情:

DELIMITER $$
CREATE DEFINER=`user`@`%` PROCEDURE `CalculateScores`(IN ID INT, OUT test INT)
BEGIN
    SELECT COUNT(*)
    INTO test
    FROM myTable
    WHERE id = ID;
END$$
DELIMITER ;

我用它运行它:

CALL CalculateScores(252, @test);

然后只是:

SELECT @test;

奇怪的是@test返回整个表的总行数,而不仅仅是我作为参数发送的id

我在这里缺少什么?教程从未提及过这个问题,我无法找到为什么会发生这种情况的答案,我可能会对搜索感到厌烦。

1 个答案:

答案 0 :(得分:4)

看起来MySQL无法区分idID

SELECT COUNT(*)
INTO test
FROM myTable
WHERE id = ID;

它将它视为1 = 1,它始终为真(如果列不可为空)。

您可以添加别名以指示id是列而不是参数。

CREATE PROCEDURE `CalculateScores`(IN ID INT, OUT test INT)
BEGIN
    SELECT COUNT(*)
    INTO test
    FROM myTable t
    WHERE t.id = ID;
END

SqlFiddleDemo