首页 > 解决方案 > SQL 代码中的语法错误,登录存储过程

问题描述

我正在编写一个登录存储过程:

 CREATE PROCEDURE `Login` (in var_login INT, in var_username varchar(45), in var_password varchar(45), out var_role INT)
BEGIN
        declare var_user_role ENUM('PersonaleAmministrativo', 'PersonaleSegreteria', 'Insegnanti', 'Allievo');
        select `Ruolo`
            from User
            where `Username` = var_username
            and `Password` = md5(var_password);
            insert into var_user_role
        if var_user_role = 'PersonaleAmministrativo' then 
                set var_role = 1;
        elseif var_user_role = 'PersonaleSegreteria' then 
                set var_role = 2;
        elseif var_user_role = 'Insegnanti' then
                set var_role = 3;
        elseif var_user_role = 'Allievo' then 
                set var_role = 4;
        else 
                set var_role = 5;
        end if;
END

CREATE PROCEDURE `Login` (in var_login INT, in var_username varchar(45), in var_password varchar(45), out var_role INT)
BEGIN
        declare var_user_role ENUM('PersonaleAmministrativo', 'PersonaleSegreteria', 'Insegnanti', 'Allievo');
        select `Ruolo`
            from User
            where `Username` = var_username
            and `Password` = md5(var_password);
            insert into var_user_role
        if var_user_role = 'PersonaleAmministrativo' then 
                set var_role = 1;
        elseif var_user_role = 'PersonaleSegreteria' then 
                set var_role = 2;
        elseif var_user_role = 'Insegnanti' then
                set var_role = 3;
        elseif var_user_role = 'Allievo' then 
                set var_role = 4;
        else 
                set var_role = 5;
        end if;
END 

但在第 9 行,它总是给我一个错误

“如果在此位置无效,则需要 PARTITION、SET、SELECT、TABLE、VALUES”

请帮忙

标签: mysqlsql

解决方案


您不能在插入中使用流控制语句(if..end if)作为替代方案,并假设您的表有 1 列(您的代码暗示)如何在插入中使用案例的示例(带选择)

drop table if exists t;
create table t(role varchar(20));

set @var_role = 1;

insert into t
select 
 case when @var_role = 1 then  
    'abs'
 else 'bbb'
 end 
;

select * from t;

+------+
| role |
+------+
| abs  |
+------+
1 row in set (0.001 sec)

推荐阅读