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

Хранимые процедуры SQL Server 2005 подобны процедурам, написанным на других языках программирования. Они могут:

П содержать различные программные конструкции, в том числе команды управления данными;

·         вызываться как из удаленного клиентского приложения, так и из других хранимых процедур и других программных объектов;

·         принимать входные параметры и возвращать данные через эти параметры;

·         возвращать данные через табличные наборы данных;

 

·         возвращать в вызывающий модуль статус выполнения процедуры. Существует четыре вида хранимых процедур:

·         хранимые процедуры, написанные на языке Transact-SQL;

 

·         расширенные хранимые процедуры, имеющие структуру обычных дина­мических библиотек операционной системы Windows. Расширенные хра­нимые процедуры считаются устаревшим средством и в новых версиях будут удалены из SQL Server;

·         хранимые процедуры на языках .NET (CLR Stored procedure, CLR — common language runtime);

·         системные хранимые процедуры, а также расширенные системные про­цедуры. Осуществляют в основном административные действия и поддер­живают интерфейс с внешними по отношению к SQL Server программами.

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

Как и хранимые процедуры, пользовательские функции являются программ­ными модулями, которые принимают параметры, выполняют некоторые дей­ствия, в том числе над данными, и возвращающие результат действия. SQL Server 2005 поддерживает следующие виды функций.

·         Скалярные функции. Функция может состоять из большого числа опера­торов, но возвращает одно скалярное (не табличное) значение.

·         Табличные функции с одним запросом (inline-функции). Содержат всего один запрос select, результат выполнения которого и возвращают.

·         Многооператорные табличные функции (функции multi-statement). Могут содержать большое количество операторов, возвращают табличный набор данных (таблицу).

·         Встроенные функции. Существует большое количество встроенных функ­ций, начиная от системных и заканчивая математическими. В главе 3 мы дадим их полный перечень.

Представления

Я отношу представления к программным объектам базы данных, хотя пред­ставления обладают явными чертами таблиц (подробнее см. разд. 3.3). Другое название представления— виртуальная таблица. Представление является всего лишь запросом select, который хранится в базе как самостоятельный объект и ведет себя по отношению к другим запросам как обыкновенная таб­лица. Представление похоже на таблицу также и тем, что для него можно создавать индексы и триггеры. Однако содержимое представления не хранит­ся в виде столбцов и строк, а формируется динамически во время обращения к нему. Представление служит своеобразным фильтром между базой данных и пользователем, для которого представление ничем не отличается от обыч­ной таблицы. Одновременно представление можно назвать некоторым ин­терфейсом, поскольку с помощью него можно получить доступ не только к нескольким таблицам одной базы данных, но и таблицам нескольких баз данных.

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

Функции, построенные на технологии .NET, будут разбираться нами в гла­ве 4. На языке Transact-SQL могут быть созданы пользовательские функции трех видов:

·         функция типа scalar — возвращает скалярное значение;

·         функция типа inline — возвращает табличное значение и состоит всего из одной команды select;

·         функция типа multi-statement — возвращает табличное выражение и мо­жет состоять из множества команд и операторов Transact-SQL.

Если формат команд создания и изменения разных типов функций может не­сколько отличаться друг от друга, то удаляются все функции одной командой:

drop function <имя_функции>

Функции отличаются от хранимых процедур по следующим позициям.

·         Если в теле процедуры (или триггера) при выполнении команды Transact-SQL произойдет ошибка, то текущая команда прерывается, и будет вы­полняться следующая команда. В случае пользовательской функции ана­логичная ошибка приведет к прерыванию выполнения функции, что в свою очередь прервет работу и той команды, которая вызвала данную функцию.

·         В теле запрещены какие-либо изменения глобальных по отношению к функции объектов, например таблиц, курсоров и т.д. Данное свойство функций объяснить достаточно просто. Функции используются в коман­дах SQL и включаются в план запроса. Команды, вызывающие изменения в глобальных объектах, вызвали бы необходимость перекомпиляции за­просов после каждого вызова функции. Не забывайте еще и о том, что если функция стоит, например, в разделе where, то она может вызываться при выполнении запроса несколько раз.

Hosted by uCoz