创建mysql存储过程时出错

wqsoz72f  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(342)
create procedure proc_Grade(in roll int(5),in name varchar(20),in marks int(5))
-> begin
-> declare grade varchar(20);
-> insert into student values(roll,name,marks);
-> if marks<=100 and marks>=67 then set grade="distinction";
-> if marks<=66 and marks>=57 then set grade="firstclass";
-> if marks<=56 and marks>=47 then set grade="secdclass";
-> if marks<=46 and marks>=40 then set grade="pass";
-> else set grade="fail";
-> insert into result values(roll,grade);
-> end if;
-> end$$

错误1064(42000):您的sql语法有错误;请查看与mysql服务器版本对应的手册,以获取第12行“”附近要使用的正确语法
下面是命令行客户端的屏幕截图

dy1byipe

dy1byipe1#

当错误信息出现时,这一条尤其没有帮助。
还有两个问题:
第二个insert语句(result)的位置,该语句只适用于课程“不及格”的学生。
if语句语法,其中第二个if及其后的if应为elseif,或者应使用end if终止每个if语句;
语法应为

IF condition1 THEN
  statement1;
ELSEIF condition2 THEN
  statement2;
END IF;

文档位于https://dev.mysql.com/doc/refman/5.7/en/if.html (尽管要注意输入错误,因为它遗漏了if结尾后的分号;)
您的程序如下所示:

delimiter $$

create procedure proc_Grade(in roll int(5),in name varchar(20),in marks int(5))
begin
  declare grade varchar(20);

  insert into student values(roll,name,marks);

  if marks<=100 and marks>=67 then 
    set grade="distinction";
  elseif marks<=66 and marks>=57 then
    set grade="firstclass";
  elseif marks<=56 and marks>=47 then
    set grade="secdclass";
  elseif marks<=46 and marks>=40 then
    set grade="pass";
  else
    set grade="fail";
  end if;

  insert into result values(roll,grade);

end $$

相关问题