Ответ
Хранимая процедура — это предварительно скомпилированный и сохраненный на сервере базы данных набор SQL-инструкций, который выполняется как единая логическая единица.
Преимущества:
- Производительность: Выполняется на стороне СУБД, уменьшая сетевой трафик и время компиляции.
- Безопасность: Можно предоставлять права на выполнение процедуры, не открывая прямой доступ к таблицам.
- Повторное использование и централизация логики: Бизнес-логика инкапсулируется в БД и может вызываться из разных приложений.
- Упрощение поддержки: Изменения вносятся в одном месте (на сервере БД).
Недостатки:
- Перенос логики в БД усложняет отладку и тестирование.
- Привязывает приложение к конкретной СУБД (проблема переносимости).
- Может создавать нагрузку на сервер БД.
Пример создания и вызова (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);
}