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

✅ Решения

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

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

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

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

Во второй задаче нужен OUT: зарплата возвращается через переменную вызывающего кода.

В третьей задаче нужен INOUT: текущая зарплата входит в процедуру, увеличивается на 10% и возвращается наружу.

Перед проверкой важно создать или выбрать таблицу employees с колонками id, age, salary.

Топ-3 ошибки: пропустить CALL, написать только имя процедуры, забыть SELECT @salary после вызова.

Решение 1: возраст по id

DELIMITER $$

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

DELIMITER ;

CALL get_employee_age(1);
CALL get_employee_age(2);

Решение 2: зарплата по id

DELIMITER $$

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 $$

DELIMITER ;

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

Решение 3: увеличение зарплаты

DELIMITER $$

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

DELIMITER ;

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

В источнике ожидаемая логика — увеличение на 10%; при целочисленном типе INT результат будет целым числом.