创建MySQL存储过程时出错 create proc_Grade(在roll int(5)中,在名称varchar(20)中,在marks int(5)中) ->开始 ->申报等级varchar(20); ->插入学生值(卷、姓名、分数); ->如果标记=67,则设置grade=“district”; ->如果分数=57,则设置等级=“第一级”; ->如果marks=47,则设置grade=“secdclass”; ->如果分数=40,则设置等级=“通过”; ->否则设置grade=“fail”; ->插入结果值(卷、等级); ->如果结束; ->结束$$
错误1064(42000):您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 在第12行的“”附近使用的语法创建MySQL存储过程时出错 create proc_Grade(在roll int(5)中,在名称varchar(20)中,在marks int(5)中) ->开始 ->申报等级varchar(20); ->插入学生值(卷、姓名、分数); ->如果标记=67,则设置grade=“district”; ->如果分数=57,则设置等级=“第一级”; ->如果marks=47,则设置grade=“secdclass”; ->如果分数=40,则设置等级=“通过”; ->否则设置grade=“fail”; ->插入结果值(卷、等级); ->如果结束; ->结束$$,mysql,Mysql,错误1064(42000):您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 在第12行的“”附近使用的语法 随着错误信息的传播,这一条尤其没有帮助 还有两个问题: 第二条insert语句(result)的位置,该语句仅适用于课程“不及格”的学生 IF语句语法,其中第二个及其后的IF应该是ELSEIF,或者您应该用END IF终止每个IF语句 语法应为 create procedure proc_Grade(in roll int(5),in name varchar(20)
随着错误信息的传播,这一条尤其没有帮助 还有两个问题:
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$$
文档位于(尽管要注意输入错误,因为它遗漏了IF;)后面的分号)
您的过程如下所示:
IF condition1 THEN
statement1;
ELSEIF condition2 THEN
statement2;
END IF;
分隔符$$
创建程序过程等级(以滚动int(5)、名称varchar(20)、标记int(5))
开始
申报等级varchar(20);
插入学生值(卷、姓名、分数);
如果分数=67,则
设置等级=“区分”;
埃尔塞夫马克=57分
设置grade=“firstclass”;
埃尔塞夫马克=47分
设置grade=“secdclass”;
埃尔塞夫分数=40分
设置等级=“通过”;
其他的
设置grade=“fail”;
如果结束;
插入结果值(卷、等级);
结束$$
听起来您好像忘记了第一行的分隔符$$,即使这样做了,我也会遇到同样的错误您确定要添加否则设置grade=“fail”
?它会在比你预期的更多的记录上设置“失败”。是的required@kunaldeshpande:您必须在创建过程
语句之前执行分隔符$$
?您可以发布mysql客户端的屏幕截图,并显示错误堆栈。错误消息是mysql的一个怪癖,但如果您知道它的含义,它仍然很有用:在解析缓冲区中找到意外的东西:…第行“意外的东西”附近…
。错误中的空字符串意味着没有什么可解析的了,也就是说,当您的语句不可能完成时,解析器在某种状态下用完了标记。在这里,解析器希望最后一个结束
后面跟着IF
,而不是什么都没有。(分隔符已不在分析缓冲区中,因为CLI实际上已将其剥离。)SELECT*FROM代码>或从表1中选择*,其中:
将生成相同的错误。@Michael sqlbot,感谢您的贡献,这是一个非常清楚的解释。
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 $$