MySQL 存储过程返回错误值

Rob*_*son 5 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 ;
Run Code Online (Sandbox Code Playgroud)

我用这个运行它:

CALL CalculateScores(252, @test);
Run Code Online (Sandbox Code Playgroud)

然后只是:

SELECT @test;
Run Code Online (Sandbox Code Playgroud)

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

我在这里缺少什么?本教程从未提及这一点,我无法找到为什么会发生这种情况的答案,我可能不擅长搜索..

Luk*_*zda 6

看起来 MySQL 无法区分idID

SELECT COUNT(*)
INTO test
FROM myTable
WHERE id = ID;
Run Code Online (Sandbox Code Playgroud)

并将其视为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
Run Code Online (Sandbox Code Playgroud)

db<>小提琴演示