2016-04-19 51 views
3

進出口新的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

我在這裏錯過了什麼?本教程從來不提這一點,我無法找到一個答案,爲什麼發生這種情況,我可能會在搜索吸..

+0

可能重複:http://stackoverflow.com/q/17673866/1292641 – Norman

+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

+1

這該死一個很難調試... –