我是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
。
我在这里缺少什么?教程从未提及过这个问题,我无法找到为什么会发生这种情况的答案,我可能会对搜索感到厌烦。
答案 0 :(得分:4)
看起来MySQL无法区分id
和ID
:
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
强>