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

🐛 Ошибки

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

⚡ Кратко: 🐛 ошибки

Параметры процедуры позволяют передавать данные в процедуру и получать результат обратно.

IN используется для входных значений: процедура читает аргумент и строит по нему запрос.

OUT используется для результата: процедура записывает значение в переменную вызывающего кода через SELECT ... INTO или SET.

INOUT совмещает оба направления: начальное значение приходит в процедуру, изменённое значение возвращается наружу.

Для OUT и INOUT в MySQL обычно передают пользовательские переменные вида @salary.

Минимальный пример: CALL get_employee_salary(1, @salary); SELECT @salary;.

Топ-3 ошибки: вызвать процедуру без CALL, передать литерал вместо переменной в OUT, забыть присвоить значение выходному параметру внутри процедуры.

Типичные ошибки

Передали число в OUT

Симптом: вызов не возвращает значение или падает с ошибкой синтаксиса.

Исправление: создайте переменную: SET @salary = 0;, затем вызовите CALL get_employee_salary(1, @salary);.

Забыли SELECT ... INTO

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

Исправление: присвойте результат параметру: SELECT salary INTO emp_salary ....

Перепутали IN и INOUT

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

Исправление: если изменение должно вернуться наружу, объявите параметр как INOUT.

Не восстановили разделитель

Симптом: следующие SQL-команды ведут себя неожиданно.

Исправление: после создания процедуры выполните DELIMITER ;.