Хранимая процедура (также называемая прок, storp, sproc, StoPro, StoredProc, StoreProc, зр, или SP) является подпрограммой доступны для приложений, которые имеют доступ к реляционной системы управления базами данных (СУБД). Такие процедуры хранятся в словаре данных базы данных.
Использование хранимых процедур включает в себя проверку данных (интегрированную в базу данных) или механизмы контроля доступа. Кроме того, хранимые процедуры могут консолидировать и централизовать логику, изначально реализованную в приложениях. Для экономии времени и памяти обширная или сложная обработка, требующая выполнения нескольких операторов SQL, может быть сохранена в хранимых процедурах, и все приложения вызывают эти процедуры. Можно использовать вложенные хранимые процедуры, выполняя одну хранимую процедуру из другой.
Хранимые процедуры могут возвращать наборы результатов, т. Е. Результаты SELECT
оператора. Такие наборы результатов могут обрабатываться с помощью курсоров, другими хранимыми процедурами, путем связывания локатора набора результатов или приложениями. Хранимые процедуры могут также содержать объявленные переменные для обработки данных и курсоры, позволяющие перебирать несколько строк в таблице. Утверждения хранимой процедуры управления потоком, как правило, включают в себя IF
, WHILE
, LOOP
, REPEAT
, и CASE
утверждения, и многое другое. Хранимые процедуры могут получать переменные, возвращать результаты или изменять переменные и возвращать их, в зависимости от того, как и где объявлена переменная.
Хранимые процедуры похожи на определяемые пользователем функции (UDF). Основное отличие состоит в том, что UDF можно использовать как любое другое выражение в операторах SQL, тогда как хранимые процедуры необходимо вызывать с помощью CALL
оператора.
CALL procedure(...)
или
EXECUTE procedure(...)
Точная и правильная реализация хранимых процедур варьируется от одной системы баз данных к другой. Большинство основных поставщиков баз данных поддерживают их в той или иной форме. В зависимости от системы базы данных хранимые процедуры могут быть реализованы на различных языках программирования, например SQL, Java, C или C ++. Хранимые процедуры, написанные на языках, отличных от SQL, могут сами выполнять или не выполнять операторы SQL.
Растущее распространение хранимых процедур привело к введению процедурных элементов в язык SQL в стандартах SQL: 1999 и SQL: 2003 в части SQL / PSM. Это сделало SQL императивным языком программирования. Большинство систем баз данных предлагают собственные расширения и расширения, зависящие от поставщика, превосходящие SQL / PSM. Существует стандартная спецификация хранимых процедур Java, а также SQL / JRT.
Система баз данных | Язык реализации |
---|---|
Кубрид | Джава |
IBM DB2 | SQL PL (близкий к стандарту SQL / PSM ) или Java |
Жар-птица | PSQL (Fyracle также поддерживает части Oracle PL / SQL) |
Informix | Джава |
Interbase | Сохраненная процедура и язык триггера |
Microsoft SQL Server | Transact-SQL и различные .NET Framework языки |
MySQL | собственные хранимые процедуры, строго соответствующие стандарту SQL / PSM |
NuoDB | SQL или Java |
OpenLink Virtuoso | Виртуальные процедуры SQL (VSP); также расширяется с помощью Java, C и других языков программирования |
Oracle | PL / SQL или Java |
PostgreSQL | PL / pgSQL, также может использовать собственные языки функций, такие как PL / Perl или PL / PHP. |
SAP HANA | SQLScript или R |
SAP ASE | Transact-SQL |
SAP SQL Anywhere | Transact-SQL, Watcom SQL |
SQLite | Не поддерживается |
В некоторых системах хранимые процедуры могут использоваться для управления транзакциями; в других случаях хранимые процедуры выполняются внутри транзакции, так что транзакции для них фактически прозрачны. Хранимые процедуры также можно вызывать из триггера базы данных или обработчика условий. Например, хранимая процедура может запускаться вставкой в определенную таблицу или обновлением определенного поля в таблице, и код внутри хранимой процедуры может быть выполнен. Написание хранимых процедур в качестве обработчиков условий также позволяет администраторам баз данных более детально отслеживать ошибки в системе, используя хранимые процедуры для обнаружения ошибок и записи некоторой контрольной информации в базу данных или внешний ресурс, например файл.
RETURN
ключевое слово), но для хранимых процедур это не обязательно.RETURN
ключевое слово, но без передачи значения.SELECT
операторах, если они не обрабатывают данные. Однако процедуры не могут быть включены в SELECT
отчеты.OUT
параметра или не возвращать никакого значения.Подготовленные операторы принимают обычный оператор или запрос и параметризуют его, чтобы в дальнейшем можно было использовать различные литеральные значения. Как и хранимые процедуры, они хранятся на сервере для повышения эффективности и обеспечивают некоторую защиту от атак с использованием SQL-инъекций. Подготовленные операторы, хотя и являются более простыми и декларативными, обычно не пишутся для использования процедурной логики и не могут работать с переменными. Благодаря простому интерфейсу и реализации на стороне клиента подготовленные операторы более широко используются в СУБД.
Смарт-контракт - это термин, применяемый к исполняемому коду, хранящемуся в цепочке блоков, в отличие от СУБД. Несмотря на то, что механизмы согласования результатов выполнения общедоступных сетей блокчейнов принципиально отличаются от традиционных частных или федеративных баз данных, они якобы выполняют те же функции, что и хранимые процедуры, хотя обычно с чувством ценности транзакции.