Я пишу первую хранимую функцию 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 урока.
Я знаю, что я, вероятно, сделать некоторые глупые ошибки, но я не могу понять, какой из них ...
Ваш параметр COURSE_ID совпадает с именем поля course_id, попробуйте переименовать его. – JohnHC
Вы. Сделал. Мои. День. Большое спасибо! – ciamiz
самостоятельно ответить на вопрос или удалить его? – Drew