2016-09-07 7 views
0

Я пишу первую хранимую функцию MySQL за всю свою жизнь, и я застрял с чем-то, что кажется глупым даже для меня, без опыта в этом.Операция MySQL CREATE FUNCTION, похоже, игнорирует условие WHERE

Это то, что я написал до сих пор:

CREATE FUNCTION `credits_per_course`(COURSE_ID INT, USER_ID INT) 
RETURNS int(11) 
BEGIN 

    DECLARE users_credits INT; 

    DECLARE course_credits INT; 
    DECLARE course_mandatory_credits INT; 
    DECLARE course_total_credits INT; 

    DECLARE lessons_count INT; 

    DECLARE lessons CURSOR FOR 
      SELECT * FROM t_lessons WHERE course_id = COURSE_ID; 

    SELECT COUNT(*) INTO lessons_count FROM t_lessons WHERE course_id = COURSE_ID; 

RETURN lessons_count; 
END 

Я называю это с помощью SELECT credits_per_course(1019, 262). Магические числа - это курс, из которого я знаю количество уроков и тестового пользователя, который в этот момент функции по-прежнему игнорируется.

Курс 1019 имеет четыре урока. Если я запустил функцию, это дает мне 2462 урока, которые являются подсчетом ВСЕХ уроков.

Для теста я пытался:

  • добавить строку SET lessons_count = 42; после SELECT COUNT(*) запроса и возвращает 42;
  • изменить предложение WHERE, используя идентификатор курса, который не существует, как 99999, и, вернувшись, он возвращает 0 уроков;
  • изменить предложение WHERE, явно передавая идентификатор курса 1019, но он все еще дает мне 2462 урока;
  • пытался запустить за пределами функции запрос SELECT COUNT(*) с идентификатором курса 1019 и он возвращает 4 урока.

Я знаю, что я, вероятно, сделать некоторые глупые ошибки, но я не могу понять, какой из них ...

+5

Ваш параметр COURSE_ID совпадает с именем поля course_id, попробуйте переименовать его. – JohnHC

+0

Вы. Сделал. Мои. День. Большое спасибо! – ciamiz

+0

самостоятельно ответить на вопрос или удалить его? – Drew

ответ

0

Как указано JohnHC, что проблема мое невежество о нечувствительны к регистру названия параметров ,

Итак, однажды изменив имя параметра на что-то вроде CID и UID, он работал правильно.

Спасибо!