2016-04-19 29 views
3

Im neu zu MySQL Stored Procedures und ich wurde nach etwas Anleitung, wie man sie benutzt, aber ich lief in eine interessante Sache mit den folgenden:MySQL gespeicherte Prozedur gibt falsche Werte

DELIMITER $$ 
CREATE DEFINER=`user`@`%` PROCEDURE `CalculateScores`(IN ID INT, OUT test INT) 
BEGIN 
    SELECT COUNT(*) 
    INTO test 
    FROM myTable 
    WHERE id = ID; 
END$$ 
DELIMITER ; 

ich es mit diesem Lauf :

CALL CalculateScores(252, @test); 

und dann einfach:

SELECT @test; 

Das merkwürdige ist, dass @test gibt die Gesamtzeilenanzahl der gesamten Tabelle nicht nur für den als Parameter gesendeten id zurück.

Was fehlt mir hier? Das Tutorial nie erwähnen, und ich kann nicht eine Antwort finden, warum dies geschieht, ich Suche saugen könnte ..

+0

Mögliche doppelte: http://stackoverflow.com/q/17673866/1292641 – Norman

+0

lol, die es zu lösen, danke für mich in die richtige Richtung =) –

Antwort

4

Es sieht aus wie MySQL nicht zwischen id und ID unterscheiden kann:

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

Und Es behandelt es wie 1 = 1, die immer wahr ist (wenn Spalte nicht nullfähig ist).


Sie könnten Alias ​​hinzufügen, um anzuzeigen, dass id Spalte und nicht die Parameter.

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

SqlFiddleDemo

+1

verdammt diese man war schwer zu debuggen ... –

Verwandte Themen