mysql存储过程登录

1 mysql sql stored-procedures

我正在使用 mysql 并有一个登录身份验证程序,

    CREATE PROCEDURE CheckPassword (IN username CHAR(8),IN password_p VARCHAR(20), OUT yes_no char(1))
    BEGIN
    IF EXISTS(SELECT * FROM USER WHERE USER_ID = username AND password = password_p) then
        set yes_no = '0';
    ELSE
         set yes_no = '1';
    END IF;
    END;
Run Code Online (Sandbox Code Playgroud)

但是mysql警告说在创建程序时出错,它说第4行有错误,它是“set yes_no = '0';”行?这个方法我也试过

    CREATE PROCEDURE CheckPassword (IN username CHAR(8),IN password_p VARCHAR(20), OUT yes_no char(1))
    BEGIN
    IF EXISTS(SELECT * FROM USER WHERE USER_ID = username AND password = password_p) then
        select '0' into yes_no;
    ELSE
         select '1' into yes_no;
    END IF;
    END;
Run Code Online (Sandbox Code Playgroud)

也没有用,创建程序时必须使用分隔符吗?你能告诉我调用这个程序的声明吗?

Fed*_*oli 5

我认为问题在于 USER 是一个保留字。另外,我建议您使用函数,而不是过程(您只想返回一个值)。此功能有效:

DELIMITER ||
CREATE FUNCTION CheckPassword (username VARCHAR(8), password_p VARCHAR(20))
    RETURNS BOOL
    NOT DETERMINISTIC
    READS SQL DATA
BEGIN
    RETURN EXISTS (SELECT username FROM `USER` WHERE USER_ID = username AND password = password_p);
END;
||
DELIMITER ;
SELECT CheckPassword('a','b');
Run Code Online (Sandbox Code Playgroud)