Sobes.tech
Назад к вопросам
Middle
10

В чём отличие функции от хранимой процедуры в БД?

Компании, где спрашивали
ГК ИннотехГК Иннотех

Ответ от нейросети

sobes.tech AI

Функция и хранимая процедура в базе данных отличаются по нескольким ключевым аспектам:

  • Возвращаемое значение: Функция всегда возвращает значение (скалярное, таблицу или другой тип), тогда как процедура может ничего не возвращать или возвращать несколько выходных параметров.
  • Использование в запросах: Функции можно использовать внутри SQL-запросов (например, в SELECT, WHERE), а процедуры вызываются отдельно командой EXECUTE или CALL.
  • Побочные эффекты: Процедуры могут изменять состояние базы (выполнять INSERT, UPDATE, DELETE), функции обычно должны быть детерминированными и не изменять данные (в некоторых СУБД это ограничение).
  • Параметры: Процедуры могут иметь входные, выходные и входно-выходные параметры, функции — только входные.

Пример функции в SQL:

CREATE FUNCTION GetTotalPrice(@OrderId INT) RETURNS DECIMAL(10,2) AS
BEGIN
    DECLARE @Total DECIMAL(10,2);
    SELECT @Total = SUM(Price * Quantity) FROM OrderDetails WHERE OrderId = @OrderId;
    RETURN @Total;
END

Пример процедуры:

CREATE PROCEDURE UpdateOrderStatus @OrderId INT, @Status VARCHAR(20) AS
BEGIN
    UPDATE Orders SET Status = @Status WHERE Id = @OrderId;
END