Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



Одним из недостатков хранимых процедур, является невозможность их использования непосредственно в выражениях, т.к. они требуют промежуточного присвоения возвращенного значения переменной, которая затем и указывается в выражении. Естественно, подобный метод применения программного кода не слишком удобен. Многие разработчики уже давно хотели иметь возможность вызова разработанных алгоритмов непосредственно в выражениях. Возможность создания пользовательских функций была предоставлена в среде MS SQL Server 2000.

Функции пользователя представляют собой самостоятельные объекты базы данных, располагаются в определенной базе данных и доступны только в ее контексте.

В SQL Server имеются следующие классы функций пользователя:

Scalar – функции возвращают обычное скалярное значение, каждая может включать множество команд, объединяемых в один блок с помощью конструкции BEGIN...END. Такие функции могут возвращать любые типы данных, кроме text, ntext, image, cursor и timestamp;

Inline – функции содержат всего одну команду SELECT и возвращают пользователю набор данных в виде значения типа данных TABLE;

Multi-statement – функции также возвращают пользователю значение типа данных TABLE, содержащее набор данных, однако в теле функции находится множество команд SQL (INSERT, UPDATE и т.д.). Именно с их помощью и формируется набор данных, который должен быть возвращен после выполнения функции.

Детерминированные функции каждый раз возвращают один и тот же результат, если предоставлять им один и тот же набор входных значений и использовать одно и то же состояние базы данных. Недетерминированные функции могут возвращать каждый раз разные результаты, даже если предоставлять им один и тот же набор входных значений и использовать одно и то же состояние базы данных.

В функциях допустимы следующие инструкции.

· Инструкции присваивания.

· Инструкции управления потоком, за исключением инструкций TRY...CATCH.

· Инструкции DECLARE, объявляющие локальные переменные и локальные курсоры.

· Инструкции SELECT, которые содержат списки выбора с выражениями, присваивающими значения локальным переменным.

· Операции над локальными курсорами, которые объявляются, открываются, закрываются и освобождаются в теле функции. Допустимы только те инструкции FETCH, которые предложением INTO присваивают значения локальным переменным. Инструкции FETCH, возвращающие данные клиенту, недопустимы.

· Инструкции INSERT, UPDATE и DELETE, которые изменяют локальные табличные переменные.

· Инструкции EXECUTE, вызывающие расширенные хранимые процедуры.





Дата публикования: 2015-09-17; Прочитано: 269 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...