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行的''附近使用的语法
答案 0 :(得分:1)
随着错误消息的传播,这一消息尤其无济于事。
还有两个问题:
第二条插入语句(结果)的位置,该语句仅对“失败”课程的学生运行。
IF 语句的语法,其中第二个及以后的 IF 应该为 ELSEIF ,或者您应终止每个带有 END 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 $$