Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Одним из недостатков хранимых процедур, является невозможность их использования непосредственно в выражениях, т.к. они требуют промежуточного присвоения возвращенного значения переменной, которая затем и указывается в выражении. Естественно, подобный метод применения программного кода не слишком удобен. Многие разработчики уже давно хотели иметь возможность вызова разработанных алгоритмов непосредственно в выражениях. Возможность создания пользовательских функций была предоставлена в среде 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!