2015-05-07 2 views
2

Я имею следующую хранимую процедуру в MySQLMySQL хранимые процедуры, если оператор не работает

CREATE DEFINER=`test_db`@`%` PROCEDURE `ADD_ATTENDANCE`(IN `programID` INT, IN `clientID` INT, IN `insDate` DATETIME, IN `updDate` DATETIME, IN `insUser` INT, IN `updUser` INT, IN `lessonDate` DATE, IN `lessonTime` TIME) 
LANGUAGE SQL 
NOT DETERMINISTIC 
CONTAINS SQL 
SQL SECURITY DEFINER 
COMMENT 'Add attedance to my calendar' 

BEGIN 
    DECLARE max_sub, availability INT; 
    DECLARE cursor_max_sub CURSOR FOR SELECT max_sub FROM app_lesson WHERE id = programID; 
    DECLARE cursor_availability CURSOR FOR SELECT count(*) FROM attendance WHERE program_id = programID AND lesson_date = lessonDate AND lesson_time = lessonTime; 
    OPEN cursor_max_sub; 
    OPEN cursor_availability; 

    read_loop: LOOP 
     FETCH cursor_max_sub INTO max_sub; 
     FETCH cursor_availability INTO availability; 
     IF (availability < max_sub) THEN 
      insert into attendance (program_id, client_id, ins_date, upd_date, ins_user, upd_user, lesson_date, lesson_time) 
      values (programID, clientID, insDate, updDate, insUser, updUser, lessonDate, lessonTime); 
      LEAVE read_loop; 
     ELSE 
      insert into attendance_hold (program_id, client_id, ins_date, upd_date, ins_user, upd_user, lesson_date, lesson_time) 
      values (programID, clientID, insDate, updDate, insUser, updUser, lessonDate, lessonTime); 
     END IF; 
    END LOOP; 
    CLOSE cursor_max_sub; 
    CLOSE cursor_availability; 
END; 

Даже хотя cursor_max_sub равно 6 и cursor_availability равно 4 моя процедура всегда выполняет оператор еще вставки. Не могли бы вы помочь мне?

Спасибо !!!

+0

уверены, что вы уверены в своем состоянии? –

+0

Как и когда вы выходите из цикла? Сравните ваш пример с примером: https://dev.mysql.com/doc/refman/5.0/en/cursors.html. Я бы добавил код для случая, когда курсоры не возвращают значения ... – Trinimon

+0

Здравствуйте. Спасибо Trinimon за ваш комментарий. По какой-то причине курсор max_sub возвращает NULL, даже SQL возвращает 6 –

ответ

0

ОК, что было сложно ... По какой-то причине, когда я изменить переменную max_sub в maxNumberOfSubscription все работало отлично ... Является ли max_sub какой-то зарезервированным ключевым словом для MySQL или там было осложнение, потому что моя переменная имела такое же имя с возвращенным полем выражения select?

Смежные вопросы