我编写了一个存储过程,用于在表中注册学生。但在这样做之前,它会检查学生是否已经在场,如果已经在场,则不会插入。
DELIMITER //
CREATE PROCEDURE test(IN sid varchar(6), IN us varchar(20), IN pswd varchar(20))
BEGIN
declare temp varchar(20);
declare x int;
declare y int;
set temp=(select username from login_student where s_id=sid);
IF(temp == NULL)
THEN insert into login_student values(sid, us, pswd);
ELSEIF (temp != NULL)
THEN set x=x+1; //have written it randomly
ELSE
set y=y+1; //have written it randomly
END IF;
END //
DELIMITER ;
login_student 表架构定义为:
CREATE TABLE login_student
(s_id varchar(6),
username varchar(20),
password varchar(20)
);
它给了我一些语法错误,任何人都可以指出错误吗?
最佳答案
我看到的两个问题:
- 您需要使用
IS NULL
和IS NOT NULL
而不是== NULL
和!= NULL
- 您对 MySQL 注释使用了错误的语法。使用
--
而不是//
还应注意,在这种情况下您永远不会到达 ELSE,因为 temp 是 NULL
或 NOT NULL
,因此您可以将其简化为 IF/ELSE 如果你愿意的话。
我建议使用 SELECT ... INTO
而不是 SET
来设置临时值。
综合起来:
DELIMITER //
DROP PROCEDURE IF EXISTS test //
CREATE PROCEDURE test(IN sid varchar(6), IN us varchar(20), IN pswd varchar(20))
BEGIN
declare temp varchar(20);
declare x int;
declare y int;
select username into temp from login_student where s_id=sid;
IF(temp IS NULL)
THEN insert into login_student values(sid, us, pswd);
ELSEIF (temp IS NOT NULL)
THEN set x=x+1; -- have written it randomly
ELSE
set y=y+1; -- have written it randomly
END IF;
END //
DELIMITER ;
关于mysql - mysql SP 中的 IF/ELSE 结构不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403054/