TGViewer
Системный Аналитик Системный Аналитик @sys_sa · 19.1K subscribers
Post #359 14.1K
Хранимые процедуры и пользовательские функции в БД

📌Кратко

Хранимые процедуры предназначены для выполнения действий, а пользовательские функции - для вычислений и возврата значений.


✔️ Хранимые процедуры

Это набор инструкций, которые выполняют любые операции с данными, сложную логику или задачи на стороне сервера БД
🟡компилируются один раз и хранятся на сервере
🟡могут содержать циклы, условные операторы
🟡как в обычном коде в языках программирования, можно реализовать логику работы с данными
🟡могут принимать параметры и возвращать результаты, но могут и не возвращать

Как используются?

🔘выполнение сложных операций (сортировка, фильтрация и агрегация), сложной бизнес-логики
🔘могут включать несколько операций, которые выполняются как одна транзакция
🔘последовательное выполнение нескольких SQL-команд
🔘регулярно выполняющихся операций, требующих быстрого повторного исполнения
🔘обеспечивают защиту, выполняясь на стороне сервера БД, а также контролируют доступ и выполнение операций. С помощью процедур можно реализовать логику доступа, проверки прав и аутентификации пользователей

Примеры

⏩процедура принимает ID сотрудника в качестве входного параметра и возвращает его имя из таблицы Employees
⏩процедура принимает данные о новом заказе (например, клиент, товары, количество) и добавляет соответствующую запись в базу данных.
⏩входной параметр -- ID заказа, процедура извлекает информацию о товарах в заказе и вычисляет стоимость всех товаров.


〰️ Минусы
💩 когда сложны, тяжело поддерживаемы, возникают проблемы с рефакторингом
💩могут создавать зависимость от конкретной СУБД — затрудняет масштабирование
💩хранение бизнес-логики в PLSQL ведет к созданию монолита. Его дальнейшее разбиение затрудняется
💩 отладка не всегда удобна, логирование и обработка ошибок выполняется вручную


✅ Пользовательские функции

Это фрагменты кода, предназначенные для выполнения конкретных операций или вычислений над данными
🔵принимают входные параметры, выполняют определенные вычисления и всегда возвращают результат
🔵не предназначены для изменения данных или выполнения транзакций

Как используются?

🔘 для сложных логических или арифметических операций
🔘возвращаемые значения используются в др. запросах / выражениях
🔘для использования операторах SQL (SELECT, WHERE и тд) для вычисления значений
🔘фильтрации данных, поиска определенных значений или обработки данных по заданными условиями
🔘для работы с текстовыми данными (разбиение строк, поиск подстрок, замена символов и тд)

Пример:
⏩преобразование даты в определенный формат или вычисление дополнительных параметров на основе входных данных.
⏩входные параметры -- ID пользователя и ID ресурса, в ответе булевое значение, указывающее, имеет ли пользователь доступ к этому ресурсу

〰️ Минусы
💩не эффективны в сложных запросах
💩на больших объемах данных могут привести к низкой производительности
💩отладка может быть трудной из-за изоляции от основного кода
💩могут зависеть от контекста сессии или окружения, что может привести к неожиданным результатам

✔️ Основные различия

Назначение
🟡процедуры -- для выполнения последовательности операций и изменения данных в БД
🔵функции -- для выполнения вычислений и возвращения результата

Возвращаемые значения
🟡процедуры могут возвращать 0 или более значений или изменять состояние БД
🔵функции возвращают только одно значение

Типы вызовов
🟡процедуры -- как отдельными операторами SQL, так и из других процедур и функций.
🔵функции -- вызываются обычно внутри запросов SQL или в выражениях, где нужно вычислить значения


ХП и пользовательские функции могут использоваться не только в БД, а еще в:
🟣приложениях на стороне сервера: могут быть частью серверных приложений, написанных на Java, C#, Python и др. Используются для обработки данных на сервере перед отправкой их клиенту.
🟣интеграциях в веб
🟣интеграциях с внешними системами, такими как API, сервисы и внешние БД, чтобы обрабатывать данные и для взаимодействия между приложениями и платформами.


⭐️ Подборки материалов по этой и другим темам доступны в
базе знаний по системному анализу

#бд
  • 👍 37
  • ❤ 16
  • 🔥 8
  • 👏 3
  • 🤡 3
More from @sys_sa
  1. Sep 28, 2026🔼AMQP, MQTT и STOMP: протоколы обмена сообщениями AMQP, MQTT и STOMP — независимые проток…
  2. Sep 26, 2026Как облегчить работу ИТ-аналитика уже сейчас — без долгосрочных перестроек процессов? Обсу…
  3. Aug 28, 2026❓ ICAM (Incident Cause Analysis Method) ICAM (Incident Cause Analysis Method) — метод разб…
  4. Aug 19, 2026🖥 NewSQL NewSQL — класс реляционных СУБД, который совмещает привычный SQL и строгие ACID…
  5. Jul 14, 2026🔼 Server Driven UI (SDUI) Server Driven UI (SDUI) — архитектурный подход, при котором сер…
  6. Jul 7, 2026📊 Сравнение Баз данных и Хранилищ данных ▫️База данных – оперативное хранилище, где содер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →