创建MySQL存储过程时出错

时间:2018-10-27 05:37:51

标签: mysql

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行的''附近使用的语法

Here's a screenshot of command line client

1 个答案:

答案 0 :(得分:1)

随着错误消息的传播,这一消息尤其无济于事。

还有两个问题:

  1. 第二条插入语句(结果)的位置,该语句仅对“失败”课程的学生运行。

  2. IF 语句的语法,其中第二个及以后的 IF 应该为 ELSEIF ,或者您应终止每个带有 END IF ;

  3. 的IF 语句

语法应采用以下形式

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

文档位于https://dev.mysql.com/doc/refman/5.7/en/if.html(尽管请注意在END 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 $$