← К оглавлению занятия

✅ Решения

📁 Блок: SQL / MySQL / Повторение ⏱️ Время изучения: ~60 мин 🎯 Сложность: Повторение

⚡ Кратко: ✅ решения

Summary session 12 повторяет хранимые процедуры и параметры IN, OUT, INOUT.

Процедура создаётся через CREATE PROCEDURE, тело помещается в BEGIN ... END, вызывается через CALL.

IN подходит для входных значений, например id сотрудника.

OUT возвращает рассчитанное значение через переменную вызывающего кода.

INOUT получает начальное значение, изменяет его и возвращает обратно.

Итоговое задание — завершить задачи практикума: возраст, зарплата, увеличение зарплаты.

Топ-3 ошибки: забыть DELIMITER, не использовать SELECT ... INTO, перепутать OUT и INOUT.

Разбор итоговых задач

DELIMITER $$

CREATE PROCEDURE get_employee_age(IN emp_id INT)
BEGIN
    SELECT age
    FROM employees
    WHERE id = emp_id;
END $$

CREATE PROCEDURE get_employee_salary(IN emp_id INT, OUT emp_salary INT)
BEGIN
    SELECT salary
    INTO emp_salary
    FROM employees
    WHERE id = emp_id;
END $$

CREATE PROCEDURE increase_salary(INOUT emp_salary INT)
BEGIN
    SET emp_salary = emp_salary * 1.1;
END $$

DELIMITER ;

CALL get_employee_age(1);

SET @salary = 0;
CALL get_employee_salary(1, @salary);
SELECT @salary;

SET @salary_for_raise = 50000;
CALL increase_salary(@salary_for_raise);
SELECT @salary_for_raise;

Проверка идёт по трём признакам: процедура создана, вызов выполнен через CALL, результат виден в выборке или в пользовательской переменной.