Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建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 - Fatal编程技术网

创建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存储过程时出错 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)

错误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),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 $$