Как я могу написать MYSQL процедуру, которая принимает два параметра и может обрабатывать один нулевой ввод? - PullRequest
0 голосов
/ 02 февраля 2020

Я новичок в 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 ;
...