Я новичок в MYSQL и только изучаю, как создавать хранимые процедуры.
Мне не удается правильно обработать значение NULL, используя оператор IF или обработку ошибок. Любое руководство приветствуется.
Как я могу получить этот код для выполнения этого результата, если пользователь вводит год и месяц, как это
call EmployeeYearMonth(1986,2)
SELECT * FROM employees
WHERE YEAR(hire_date) = Num1
AND MONTH(hire_date) = Num2;
, и этот результат, если пользователь вводит год только как
call EmployeeYearMonth(1986)
SELECT * FROM employees
WHERE YEAR(hire_date) = Num1
Меня попросили создать процедуру, которая могла бы фильтровать базу данных в соответствии с наймом сотрудника по году / месяцу. Процедура должна работать, если пользователь пропустил месяц.
ПРИМЕР 1 - Я пытался обработать его с помощью «ЕСЛИ НУЛЬ ТОГДА», но когда я запускаю call EmployeeYearMonth(1986);
Я получаю ошибку 1318
DELIMITER $$
CREATE PROCEDURE EmployeeYearMonth(Num1 INT,Num2 INT)
DETERMINISTIC
BEGIN
IF Num2 IS NULL THEN
SELECT * FROM employees
WHERE YEAR(hire_date) = Num1;
ELSE
SELECT * FROM employees
WHERE YEAR(hire_date) = Num1
AND MONTH(hire_date) = Num2;
END IF;
END$$
DELIMITER ;
ПРИМЕР 2 -
Я пытался обработать ошибку 1318
DELIMITER $$
CREATE PROCEDURE EmployeeYearMonth(Num1 INT, Num2 INT)
BEGIN
-- error code for handling missing parameter in event of missing month
DECLARE EXIT HANDLER FOR 1318
BEGIN
SELECT * FROM employees
WHERE YEAR(hire_date) = Num1;
END;
-- main code to handle finding year and month
SELECT * FROM employees
WHERE YEAR(hire_date) = Num1
AND MONTH(hire_date) = Num2;
END$$
DELIMITER ;