变量中的MySQL存储过程语法错误

变量中的MySQL存储过程语法错误,mysql,stored-procedures,procedure,Mysql,Stored Procedures,Procedure,我有一个带有begindate lesson count和weekdays列的表组。我想写一个MySQL过程,用于根据组将数据添加到另一个名为lessons的表中。但我无法处理MySQL的语法。您能否帮助我解决该程序中的问题: CREATE PROCEDURE simpleproc (IN idGroup INT, IN groupName varchar(20),IN beginDate date, IN weekday1 INT, IN weekday2 INT, IN lessonCoun

我有一个带有begindate lesson count和weekdays列的表组。我想写一个MySQL过程,用于根据组将数据添加到另一个名为lessons的表中。但我无法处理MySQL的语法。您能否帮助我解决该程序中的问题:

CREATE PROCEDURE simpleproc (IN idGroup INT, IN groupName varchar(20),IN beginDate date, IN weekday1 INT, IN weekday2 INT, IN lessonCount INT)
BEGIN
DECLARE  i;
SET i:=1;
WHILE i<=lessonCount  DO
    DATE_ADD(beginDate,INTERVAL 1 DAY)
IF (WEEKDAY(beginDate)=weekday1) OR (WEEKDAY(beginDate)=weekday2) THEN
SET name:=groupName+i; 
SET price:=DIV(price,8)
   insert into lessons (lessonName, idGroup, lessonPrice, datePassed) 
   values (name,idGroup,price,begindate);
   SET i:=i+1
   END IF;



  END WHILE;


END
CREATE PROCEDURE simpleproc(在idGroup INT、groupName varchar(20)、beginDate date、weekday1 INT、weekday2 INT、lessonCount INT中)
开始
我宣布;
集合i:=1;

而我这将运行。确保:1。当
循环时,在
中代码的适当位置增加
i
。2.避免在字段和变量中使用保留字(如
name
)。3.在对其进行整数除法之前,在某个地方定义
price
变量。您知道代码和表的结构。没有人能为你做这件事

DROP PROCEDURE IF EXISTS `simpleproc`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `simpleproc`(IN idGroup INT, IN groupName varchar(20),IN beginDate date, IN weekday1 INT, IN weekday2 INT, IN lessonCount INT)
BEGIN
DECLARE i int;
DECLARE name1 int;
DECLARE price int;

SET  i:=1;
WHILE i<=lessonCount  DO
  SET beginDate:=DATE_ADD(beginDate,INTERVAL 1 DAY);
  IF WEEKDAY(beginDate) in(weekday1,weekday2) THEN
    SET name1:=groupName+i; 
    SET price:=price DIV 8;
    insert into lessons (lessonName, idGroup, lessonPrice, datePassed) 
      values (name1,idGroup,price,begindate);
  END IF;
  SET i:=i+1;
END WHILE;
END
;;
DELIMITER ;
DROP过程(如果存在)`simpleproc`;
分隔符;;
CREATE DEFINER=`root`@`localhost`PROCEDURE`simpleproc`(在idGroup INT中,在groupName varchar(20)中,在beginDate date中,在weekday1 INT中,在weekday2 INT中,在lessonCount INT中)
开始
声明i int;
声明name1int;
申报价格;
集合i:=1;

虽然我不确定您是否能准备一个
创建过程
。您至少缺少最后的
结尾
,因此您确定代码完整吗?您可能也想添加错误消息。请确保我忘记复制两个端点。结束,而结束。它给出了错误代码1193:未知系统变量“i”。除了板条箱程序,您可以提出什么建议?请回答问题以添加缺少的零件。您必须
声明
i
或使用
@i
(会话特定变量),这取决于您要执行的操作,该变量可能是正确的。它仍然有错误代码1064。我用MySQL Workbench测试了一下谢谢。如何从另一个表idGroup、groupName beginDate发送到此过程和调用过程?当我试图执行它时,它在第3行分号上仍然给出错误missed@M.Namiz我想这已经是另一个问题了。根据您的问题MySQL存储过程语法错误,在variables@M.Namiz您还可以通过使用
在(weekday1,weekday2)中使用
来优化代码,然后使用
调用simpleproc(arg1,arg2,…)
@M.Namiz您也可以按照我在编辑后的答案中所述的方式明确说明分隔符。