我是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 ,还返回整个表的总行数。
我在这里想念什么?本教程从未提到过这一点,而且我找不到为什么会发生这种情况的答案,我可能会很讨厌搜索。
看来MySQL无法区分id
和ID
:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句