Skip to content

24. Хранимые процедуры Transact SQL

Pandas edited this page Jan 2, 2018 · 1 revision

Хранимая процедура является группой инструкций языка 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, если процедура является первой инструкцией в пакете.

Clone this wiki locally