MySQL使用If条件在While循环中设置变量
我正在制定一个程序,该程序执行以下操作: 声明了游标后,我希望遍历表中的所有条目,以查找给定期间覆盖游标的条目 例:一名学生a从3号到6号在x年级上学。让我们找出所有和他一起学习过至少一次的同学 while循环将应用于同一个表。但我想知道是否至少有一个条目。因此,如果出现第一个条目,while循环应该停止 一个学生B可能和A去了同一个班级。但是一年来他一直在另一个班。举个例子 这是我的问题。我有两个变量要设置,我得到一个语法错误MySQL使用If条件在While循环中设置变量,mysql,Mysql,我正在制定一个程序,该程序执行以下操作: 声明了游标后,我希望遍历表中的所有条目,以查找给定期间覆盖游标的条目 例:一名学生a从3号到6号在x年级上学。让我们找出所有和他一起学习过至少一次的同学 while循环将应用于同一个表。但我想知道是否至少有一个条目。因此,如果出现第一个条目,while循环应该停止 一个学生B可能和A去了同一个班级。但是一年来他一直在另一个班。举个例子 这是我的问题。我有两个变量要设置,我得到一个语法错误 DELIMITER $$ DROP PROCEDURE IF EX
DELIMITER $$
DROP PROCEDURE IF EXISTS coworkers$$
CREATE PROCEDURE coworkers(
IN gus INT,
IN rus INT,
OUT gto INT
)
BEGIN
DECLARE recCID INT;
DECLARE recSDT DATE;
DECLARE recEDT DATE;
DECLARE done INT DEFAULT FALSE;
DECLARE ctr INT;
DECLARE cwrk CURSOR FOR
SELECT comp_id, start_date, end_date FROM skill_cv_test WHERE usr_id = rus;
DECLARE CONTINUE HANDLER
FOR NOT FOUND
SET done = TRUE;
OPEN cwrk;
SET ctr = 0;
loop_cwrk: WHILE(ctr<1) DO
FETCH cwrk INTO recCID, recSDT, recEDT;
IF EXISTS
(SELECT *
FROM skill_cv_test AS m
WHERE m.usr_Id = gus AND m.usr_id != rus AND (m.start_date < recSDT OR m.end_date <= recEDT) AND m.comp_id = recCID)
THEN
SET ctr = 1,
SET gto = 1;
IF done THEN
LEAVE loop_cwrk;
END IF;
END WHILE loop_cwrk;
CLOSE cwrk;
end $$
delimiter ;
CALL coworkers(2,1,@gto);
我尝试了不同格式的部分,然后设置。。。这就是问题所在。
以下是错误代码:
您的SQL语法有错误;检查手册
对应于您的MySQL服务器版本,以便使用正确的语法
靠近ctr':=1,
设置“gto”;=1;
在这里,你可以看到我在其他方面还尝试了什么。也许这是一个完全错误的方法
顺便说一句:循环中的Select只是一个占位符,用于完成整个过程
但是现在,我做错了什么
提前谢谢
解决方案
您需要为第一个IF添加END IF
谢谢请问有什么要考虑的符号吗?似乎还有另一个问题。@nucky当然可以,您可以用新问题更新您的问题。我的错误:在第一组问题之后,我遗漏了一个分号。
DELIMITER $$
DROP PROCEDURE IF EXISTS coworkers$$
CREATE PROCEDURE coworkers(
IN gus INT,
IN rus INT,
OUT gto INT
)
BEGIN
DECLARE recCID INT;
DECLARE recSDT DATE;
DECLARE recEDT DATE;
DECLARE done INT DEFAULT FALSE;
DECLARE ctr INT;
DECLARE cwrk CURSOR FOR
SELECT comp_id, start_date, end_date FROM skill_cv_test WHERE usr_id = rus;
DECLARE CONTINUE HANDLER
FOR NOT FOUND
SET done = TRUE;
OPEN cwrk;
SET ctr = 0;
loop_cwrk: WHILE(ctr<1) DO
FETCH cwrk INTO recCID, recSDT, recEDT;
IF EXISTS
(SELECT *
FROM skill_cv_test AS m
WHERE m.usr_Id = gus AND m.usr_id != rus AND (m.start_date < recSDT
OR m.end_date <= recEDT) AND m.comp_id = recCID)
THEN
SET ctr = 1;
SET gto = 1;
END IF;
IF done THEN
LEAVE loop_cwrk;
END IF;
END WHILE loop_cwrk;
CLOSE cwrk;
end $$
delimiter ;
CALL coworkers(2,1,@gto);
IF EXISTS
(SELECT *
FROM skill_cv_test AS m
WHERE m.usr_Id = gus AND m.usr_id != rus AND (m.start_date < recSDT
OR m.end_date <= recEDT) AND m.comp_id = recCID)
THEN
SET ctr = 1;
SET gto = 1;
END IF; -- Add END IF here
IF done THEN
LEAVE loop_cwrk;
END IF;