MySQL存储过程返回错误值

罗宾·佩尔森

我是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作为参数发送I ,还返回整个表的总行数

我在这里想念什么?本教程从未提到过这一点,而且我找不到为什么会发生这种情况的答案,我可能会很讨厌搜索。

卢卡斯·索佐达(Lukasz Szozda)

看来MySQL无法区分idID

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

并且将其视为1= 1,它始终为true(如果column不可为空)。


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

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

db <> fiddle演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章