CREATE PROCEDURE в PostgreSQL: создание процедуры

В PostgreSQL оператор CREATE PROCEDURE используется для создания хранимых процедур, которые выполняют последовательность команд SQL без возврата значения. В отличие от функций, процедуры вызываются с помощью CALL и могут выполнять управляющие конструкции, включая транзакции.

Синтаксис

CREATE PROCEDURE имя_процедуры (аргументы)
LANGUAGE язык
AS $$
    тело_процедуры
$$;
  • имя_процедуры — уникальное имя процедуры в схеме.
  • аргументы — параметры, передаваемые в процедуру.
  • язык — язык, используемый для написания процедуры.
  • тело_процедуры — код, выполняемый при вызове процедуры.

Создание простой процедуры

Пример процедуры без параметров:

CREATE PROCEDURE log_event()
LANGUAGE plpgsql
AS $$
BEGIN
    INSERT INTO event_log (event_time, description) VALUES (NOW(), 'Событие зафиксировано');
END;
$$;

Вызов процедуры:

CALL log_event();

Создание процедуры с параметрами

Процедура, принимающая параметры:

CREATE PROCEDURE add_user(username TEXT, email TEXT)
LANGUAGE plpgsql
AS $$
BEGIN
    INSERT INTO users (name, email) VALUES (username, email);
END;
$$;

Вызов с аргументами:

CALL add_user('John Doe', 'john@example.com');

Использование транзакций в процедурах

Процедуры могут управлять транзакциями с помощью COMMIT и ROLLBACK:

CREATE PROCEDURE transfer_money(sender INT, receiver INT, amount NUMERIC)
LANGUAGE plpgsql
AS $$
BEGIN
    BEGIN
        UPDATE accounts SET balance = balance - amount WHERE id = sender;
        UPDATE accounts SET balance = balance + amount WHERE id = receiver;
        COMMIT;
    EXCEPTION
        WHEN OTHERS THEN
            ROLLBACK;
    END;
END;
$$;

Удаление процедуры

Для удаления процедуры используется DROP PROCEDURE:

DROP PROCEDURE add_user(TEXT, TEXT);