mysql - mysql SP 中的 IF/ELSE 结构不起作用

标签 mysql stored-procedures

我编写了一个存储过程,用于在表中注册学生。但在这样做之前,它会检查学生是否已经在场,如果已经在场,则不会插入。

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)
);

它给了我一些语法错误,任何人都可以指出错误吗?

最佳答案

我看到的两个问题:

  1. 您需要使用 IS NULLIS NOT NULL 而不是 == NULL!= NULL
  2. 您对 MySQL 注释使用了错误的语法。使用 -- 而不是 //

还应注意,在这种情况下您永远不会到达 ELSE,因为 temp 是 NULLNOT 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/

相关文章:

java - createStoredProcedureQuery 未解决

mysql - 存储由 0 和 1 组成的长数字的最佳数据类型

php - 如何从模型打印 Yii2 GridView 中的第一个提醒、第二个提醒?

mysql - 为 mac os 安装哪个 jdbc (connector/j)

vba - 尝试使用 VBA 提取 SQL Server 存储过程时获取对象变量、 block 变量未设置错误

sql - 'end' 附近的语法不正确

mysql - 在 shell 脚本中执行 mysql 查询

php - 无法在 $_SESSION 中存储数据库连接

c# - 有什么好的 C# 代码生成器可以使用 oracle 存储过程吗?

stored-procedures - Apollo 服务器、GraphQL 和 Sequelize - 如何将原始数据放入 GraphQL 模式响应