2017-01-20 1 views
0

dans le msql sp ci-dessous j'essaie de quitter si le jour de la semaine est vendredi, mais je ne peux pas le faire fonctionner car il semble y avoir une erreur de syntaxe à "END IF;" Je ne peux pas le voir.mysql exit sp avec si

CREATE PROCEDURE `bookFreeDay`() 
    proc_label:BEGIN 

    DECLARE bDone INT; 
    DECLARE t1 VARCHAR(5); 

    -- todo exclude sa/so 
    IF DAYOFWEEK(SUBDATE(CURDATE(),1)) = 5 THEN 
     LEAVE proc_label; 
    END IF; 

    DECLARE curs CURSOR FOR select durTime from freeDays where 
    (year is not null && year= substring(CURDATE(),1,4) && start=substring(SUBDATE(CURDATE(),1), 6,5)) 
    || (year is null && start=substring(SUBDATE(CURDATE(),1), 6,5)); 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1; 

    OPEN curs; 

    SET bDone = 0; 
    REPEAT 
    FETCH curs INTO t1; 

     select CONCAT(SUBDATE(CURDATE(),1), " 08:00:00") into @st; 
     select addtime(@st, t1) into @en; 

     insert into timeEntries 
     (select 
      null, 
      idUsers, 
      @st, 
      @en, 
      null, 
      2 
     from users 
     where right(pensum,1)='%'); 

    UNTIL bDone END REPEAT; 

    CLOSE curs; 

END 

Répondre

0

14.6.6.2 Cursor DECLARE Syntax

...

déclarations de curseur doivent apparaître avant les déclarations de gestionnaire et après les déclarations de variables et de l'état.

...

... 

/* 
-- todo exclude sa/so 
IF DAYOFWEEK(SUBDATE(CURDATE(),1)) = 5 THEN 
    LEAVE proc_label; 
END IF; 
*/ 

DECLARE curs CURSOR FOR select durTime 
         from freeDays 
         where (year is not null && 
           year= substring(CURDATE(),1,4) && 
           start=substring(SUBDATE(CURDATE(),1), 6,5)) || 
           (year is null && 
           start=substring(SUBDATE(CURDATE(),1), 6,5)); 

DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1; 

-- todo exclude sa/so 
IF DAYOFWEEK(SUBDATE(CURDATE(),1)) = 5 THEN 
    LEAVE proc_label; 
END IF; 

...