Хранимая процедура ( также называемая prc , proc , storp , sproc , StoPro , StoredProc , StoreProc , sp или SP ) — это подпрограмма , доступная приложениям, которые обращаются к системе управления реляционными базами данных (RDBMS). Такие процедуры хранятся в словаре данных базы данных .
Использование хранимых процедур включает проверку данных (интегрированную в базу данных) или механизмы контроля доступа . Кроме того, хранимые процедуры могут консолидировать и централизовать логику, которая изначально была реализована в приложениях. Для экономии времени и памяти обширная или сложная обработка, требующая выполнения нескольких операторов SQL, может быть сохранена в хранимых процедурах, и все приложения будут вызывать эти процедуры. Можно использовать вложенные хранимые процедуры, выполняя одну хранимую процедуру из другой.
Хранимые процедуры могут возвращать наборы результатов , т. е. результаты оператора SELECT
. Такие наборы результатов могут обрабатываться с помощью курсоров , другими хранимыми процедурами, путем связывания локатора набора результатов или приложениями. Хранимые процедуры также могут содержать объявленные переменные для обработки данных и курсоры, которые позволяют им проходить по нескольким строкам в таблице. Операторы управления потоком хранимых процедур обычно включают в себя операторы IF
, WHILE
, LOOP
, REPEAT
, CASE
и и многое другое. Хранимые процедуры могут получать переменные, возвращать результаты или изменять переменные и возвращать их в зависимости от того, как и где объявлена переменная.
Хранимые процедуры похожи на пользовательские функции (UDF). Главное отличие состоит в том, что UDF можно использовать как любое другое выражение в операторах SQL, тогда как хранимые процедуры должны вызываться с помощью CALL
оператора. [1]
Процедура ВЫЗОВА(...)
или
ВЫПОЛНИТЬ процедуру(...)
Точная и правильная реализация хранимых процедур различается в зависимости от системы баз данных. Большинство основных поставщиков баз данных поддерживают их в той или иной форме. В зависимости от системы баз данных хранимые процедуры могут быть реализованы на различных языках программирования , например , SQL , Java , C или C++ . Хранимые процедуры, написанные на языках, отличных от SQL, могут выполнять или не выполнять сами операторы SQL.
Растущее принятие хранимых процедур привело к введению процедурных элементов в язык SQL в стандартах SQL:1999 и SQL:2003 в части SQL/PSM . Это сделало SQL императивным языком программирования . Большинство систем баз данных предлагают фирменные и специфичные для поставщика расширения, превосходящие SQL/PSM. Существует стандартная спецификация для хранимых процедур Java , а также SQL/JRT .
Система баз данных | Язык реализации |
---|---|
КУБРИД | Ява |
IBMDB2 | SQL PL (близкий к стандарту SQL/PSM ) или Java |
Жар-птица | PSQL (Fyracle также поддерживает части Oracle PL/SQL) |
Информикс | Ява |
Интербаза | Язык хранимых процедур и триггеров |
Microsoft SQL-сервер | Transact-SQL и различные языки .NET Framework |
MySQL , MariaDB | собственные хранимые процедуры, строго соответствующие стандарту SQL/PSM |
NuoDB | SQL или Java |
OpenLink Виртуоз | Virtuoso SQL Procedures (VSP); [2] также расширяется с помощью Java, C и других языков программирования |
Оракул | PL/SQL или Java |
PostgreSQL | PL/pgSQL , также может использовать собственные языки функций, такие как PL/Tcl, PL/Perl или PL/Python [3] |
SAP-ХАНА | SQLScript или R |
SAP АСЭ | Transact-SQL |
SAP SQL везде | Transact-SQL , Watcom SQL |
SQLite | Не поддерживается |
В некоторых системах хранимые процедуры могут использоваться для управления транзакциями; в других хранимые процедуры запускаются внутри транзакции, так что транзакции фактически прозрачны для них. Хранимые процедуры также могут быть вызваны из триггера базы данных или обработчика условий. Например, хранимая процедура может быть вызвана вставкой в определенную таблицу или обновлением определенного поля в таблице, и код внутри хранимой процедуры будет выполнен. Написание хранимых процедур в качестве обработчиков условий также позволяет администраторам баз данных отслеживать ошибки в системе с большей детализацией, используя хранимые процедуры для обнаружения ошибок и записи некоторой информации аудита в базу данных или внешний ресурс, такой как файл.
RETURN
ключевое слово), но для хранимых процедур это не обязательно.RETURN
ключевые слова, но без передачи значения.SELECT
операторах, при условии, что они не выполняют манипуляции данными. Однако процедуры не могут быть включены в SELECT
операторы.OUT
параметра или не возвращать ни одного значения.Подготовленные операторы берут обычный оператор или запрос и параметризуют его так, чтобы в дальнейшем можно было использовать различные литеральные значения. Как и хранимые процедуры, они хранятся на сервере для эффективности и обеспечивают некоторую защиту от атак с использованием SQL-инъекций. Хотя они проще и более декларативны, подготовленные операторы обычно не пишутся для использования процедурной логики и не могут работать с переменными. Благодаря простому интерфейсу и реализациям на стороне клиента подготовленные операторы более широко используются повторно между СУБД.
Смарт-контракт — это термин, применяемый к исполняемому коду, хранящемуся в блокчейне, в отличие от СУРБД. Несмотря на то, что механизмы консенсуса результатов выполнения публичных сетей блокчейнов принципиально отличаются от традиционных частных или федеративных баз данных, они выполняют якобы ту же функцию, что и хранимые процедуры, хотя обычно с ощущением транзакции ценности.