Что такое хранимая процедура в SQL?

«Что такое хранимая процедура в SQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Хранимая процедура — это предварительно скомпилированный и сохраненный на сервере базы данных набор SQL-инструкций, который выполняется как единая логическая единица.

Преимущества:

  1. Производительность: Выполняется на стороне СУБД, уменьшая сетевой трафик и время компиляции.
  2. Безопасность: Можно предоставлять права на выполнение процедуры, не открывая прямой доступ к таблицам.
  3. Повторное использование и централизация логики: Бизнес-логика инкапсулируется в БД и может вызываться из разных приложений.
  4. Упрощение поддержки: Изменения вносятся в одном месте (на сервере БД).

Недостатки:

  • Перенос логики в БД усложняет отладку и тестирование.
  • Привязывает приложение к конкретной СУБД (проблема переносимости).
  • Может создавать нагрузку на сервер БД.

Пример создания и вызова (MySQL/Java):

-- Создание процедуры в БД
DELIMITER //
CREATE PROCEDURE GetEmployeeName(IN empId INT, OUT empName VARCHAR(100))
BEGIN
    SELECT name INTO empName FROM employees WHERE id = empId;
END //
DELIMITER ;
// Вызов из Java с использованием JDBC
String call = "{call GetEmployeeName(?, ?)}";
try (CallableStatement stmt = connection.prepareCall(call)) {
    stmt.setInt(1, 123); // Установка входного параметра (IN)
    stmt.registerOutParameter(2, Types.VARCHAR); // Регистрация выходного параметра (OUT)
    stmt.execute();
    String result = stmt.getString(2); // Получение результата
    System.out.println("Employee name: " + result);
}