← Назад к вопросам

Что такое хранимые процедуры в БД?

2.0 Middle🔥 201 комментариев
#Базы данных (NoSQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Хранимые процедуры в БД

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

Основные характеристики

  • Хранятся в БД — код находится на сервере, не передается по сети
  • Предкомпилированы — синтаксис проверяется заранее, выполнение быстрее
  • Переиспользуемы — можно вызвать из разных приложений
  • Принимают параметры — работают с переменными
  • Возвращают результаты — могут возвращать наборы данных или скалярные значения

Пример создания хранимой процедуры в PostgreSQL

CREATE OR REPLACE FUNCTION get_user_orders(user_id INT)
RETURNS TABLE (order_id INT, order_date DATE, total NUMERIC) AS $$
BEGIN
  RETURN QUERY
  SELECT o.id, o.created_at, o.total_sum
  FROM orders o
  WHERE o.user_id = $1
  ORDER BY o.created_at DESC;
END;
$$ LANGUAGE plpgsql;

Как вызвать из Python

import psycopg2

conn = psycopg2.connect("dbname=mydb user=postgres")
cur = conn.cursor()

# Вызов хранимой процедуры
cur.execute("SELECT * FROM get_user_orders(%s)", (user_id,))
orders = cur.fetchall()

for order in orders:
    print(f"Order {order[0]}: {order[1]} - {order[2]}")

cur.close()
conn.close()

Плюсы хранимых процедур

  • Производительность — код выполняется на сервере БД, минимум передачи данных
  • Безопасность — логика закрыта, сложнее делать SQL-injection
  • Консистентность — единая точка логики для всех приложений
  • Сложная логика — можно реализовать сложные алгоритмы в БД

Минусы хранимых процедур

  • Сложность отладки — код на другом языке, требует отдельных инструментов
  • Версионирование — сложно отслеживать изменения, требует миграций
  • Переносимость — синтаксис разный в разных СУБД (PostgreSQL, MySQL, Oracle)
  • Масштабируемость — нельзя масштабировать БД горизонтально так же как приложение

Когда использовать

Хранимые процедуры имеют смысл для:

  • Сложных бизнес-логик, которые часто меняются
  • Операций, критичных по производительности
  • Обеспечения консистентности данных между приложениями

Но в современных архитектурах часто предпочитают ORM и логику в приложении, так как это упрощает разработку, тестирование и масштабирование.

Что такое хранимые процедуры в БД? | PrepBro