Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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使用If条件在While循环中设置变量_Mysql - Fatal编程技术网

MySQL使用If条件在While循环中设置变量

MySQL使用If条件在While循环中设置变量,mysql,Mysql,我正在制定一个程序,该程序执行以下操作: 声明了游标后,我希望遍历表中的所有条目,以查找给定期间覆盖游标的条目 例:一名学生a从3号到6号在x年级上学。让我们找出所有和他一起学习过至少一次的同学 while循环将应用于同一个表。但我想知道是否至少有一个条目。因此,如果出现第一个条目,while循环应该停止 一个学生B可能和A去了同一个班级。但是一年来他一直在另一个班。举个例子 这是我的问题。我有两个变量要设置,我得到一个语法错误 DELIMITER $$ DROP PROCEDURE IF EX

我正在制定一个程序,该程序执行以下操作: 声明了游标后,我希望遍历表中的所有条目,以查找给定期间覆盖游标的条目

例:一名学生a从3号到6号在x年级上学。让我们找出所有和他一起学习过至少一次的同学

while循环将应用于同一个表。但我想知道是否至少有一个条目。因此,如果出现第一个条目,while循环应该停止

一个学生B可能和A去了同一个班级。但是一年来他一直在另一个班。举个例子

这是我的问题。我有两个变量要设置,我得到一个语法错误

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;