-
Notifications
You must be signed in to change notification settings - Fork 2
24. Хранимые процедуры Transact SQL
Хранимая процедура является группой инструкций языка Transact-SQL, которая была один раз откомпилирована, и может выполняться много раз. Это увеличивает производительность при выполнении процедуры, так как инструкции языка Transact-SQL не нужно повторно компилировать.
Инструкции CREATE PROCEDURE (или CREATE TRIGGER)
не могут выходить за пределы одного пакета. Это означает, что хранимая процедура (или триггер) всегда создаются в едином пакете и компилируются в план выполнения. План выполнения создается при первом выполнении хранимой процедуры (или триггера). Хранимые процедуры в аналогичны процедурам в других языках программирования:
- они обрабатывают входные параметры и возвращают вызывающей процедуре или пакету значения в виде выходных параметров;
- они содержат программные инструкции, которые выполняют операции в базе данных, в том числе вызывающие другие процедуры;
- они возвращают значение состояния вызывающей процедуре или пакету, таким образом передавая сведения об успешном или неуспешном завершении (и причины последнего).
Для создания хранимой процедуры используется инструкция CREATE PROCEDURE
, имеющая следующий синтаксис:
CREATE PROCEDURE [ имя-схемы. ] имя-процедуры [ список-объявлений- параметров ]
[ WITH список-опций-процедуры ]
[ FOR REPLICATION ]
AS
тело-процедуры [; ]
- FOR REPLICATION указывает, что процедура создается для репликации.
- Параметрами процедуры могут быть любые типы данных, за исключением table.
- Тип данных cursor может быть использован только в качестве выходного параметра.
- Одна процедура может вызывать другую. Уровень вложенности увеличивается на 1, когда начинается выполнение вызванной процедуры, и уменьшается на 1, когда вызванная процедура завершается. Уровень вложенности процедур может достигать 32. Текущий уровень вложенности процедур можно получить при помощи функции
@@NESTLEVEL
.
Чтобы выполнить процедуру, надо использовать инструкцию EXECUTE
или EXEC
. Также можно выполнить процедуру без использования ключевого слова EXECUTE
или EXEC
, если процедура является первой инструкцией в пакете.