2016-04-23 8 views
0

ich eine gespeicherte Prozedur erstellt, die Anforderung, wie untenKann nicht variabel in else if-Anweisung in MySql gesetzt

Wenn ich die gespeicherte Prozedur mit einem Benutzernamen, in denen zu vergleichen, werden eingegeben ausgeführt werden, wenn Benutzername existiert in der Datenbank sind dann (variabel) result_userId wird ELSE bei userId gesetzt, wenn Benutzername dann nicht in der Datenbank Dosis vorhanden ist (Variable) result_userId wird die Zahl 99

, aber ich kann das nicht tun,

Bitte helfen Sie mir gesetzt werden!

:: CODE UNTEN ::

DELIMITER $$ 
USE `shoppy` $$ 
CREATE PROCEDURE `testProc02` 
(
    IN _username CHAR(50), 
    OUT result_userId INT UNSIGNED 
) 
BEGIN 
    SELECT @uId := userId FROM user 
    WHERE userName = _username; 
    IF @uId = NULL THEN 
     SET result_userId = 99; 
    ELSE 
     SET result_userId = @uId; 
    END IF;  
END $$ 
DELIMITER ; 

wenn ich rufe testProc02();

enter image description here

Antwort

3

Sie können nicht den Gleichheitsoperator = auf null verwenden. Sie müssen den Ausdruck IS NULL testen oder den null-sicheren Gleichheitsoperator <=> verwenden.

Code sollte

DELIMITER $$ 
USE `shoppy` $$ 
CREATE PROCEDURE `testProc02` 
(
    IN _username CHAR(50), 
    OUT result_userId INT UNSIGNED 
) 
BEGIN 
    SELECT @uId := userId FROM user 
    WHERE userName = _username; 
    IF @uId IS NULL THEN 
     SET result_userId = 99; 
    ELSE 
     SET result_userId = @uId; 
    END IF;  
END $$ 
DELIMITER ; 

sein was passiert ist, dass @uID = NULL ergibt immer null, die die if interpretiert als false.

+0

Vielen Dank, weil meine WorkBench die result_userId nicht reeshesh kann, also ich sehr hart zum Testen dieser Codes Ich weiß nicht, warum meine Workbench nur die neueste Ergebnisnummer T_T zeigt, ob ich versuche, hart zu versuchen –