Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiNovye.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.92 Mб
Скачать

Лекция 07: Программируемые объекты в ms sql Server Пользовательские функции sql Server

Функции в языках программирования  это конструкции, содержащие часто исполняемый код. Функция выполняет какие-либо действия над данными и возвращает некоторое значение. Каждая функция обладает собственным именем, и когда это имя встречается в основной программе, управление передаётся данной функции. Этот процесс называется вызовом функции.

SQL Server поддерживает два типа функций:

  • встроенные функции (built-in functions), которые являются составной частью среды программирования и выполняют заранее предопределённую последовательность команд Transact-SQL; они не могут быть модифицированы пользователем; к таким функциям относятся, например, COUNT, SUM, MIN, MAX;

  • функции пользователя (user-defined functions), имя таких функций и последовательность входящих в них команд задаёт сам пользователь.

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

Функции пользователя (user-defined function) представляют собой самостоятельные объекты базы данных, такие как, например, хранимые процедуры или триггеры. Таким образом, функция пользователя располагается в определённой базе данных и доступна только в контексте этой базы данных.

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

  • Scalar  эти функции характеризуются тем, что возвращают обычное скалярное значение любого из типов данных, поддерживаемых SQL Server, за исключением типов данных timestamp, text, ntext, image, table и cursor; функция может включать множество команд, которые объединяются в один блок;

  • Inline  отличительной особенностью этой функции является то, что она содержит всего одну команду  запрос SELECT; с помощью этого запроса формируется набор данных, который и возвращается пользователю в виде значения типа данных table;

  • Multistatement  как и предыдущие, функции рассматриваемого типа возвращают пользователю значение типа данных table, содержащее набор данных; однако в отличие от функций Inline при работе с функциями Multistatement тело функции может содержать множество команд Transact-SQL (таких как INSERT, UPDATE и т. д.); именно с помощью этих команд и формируется набор данных, который должен быть возвращён после выполнения функции; значения типа данных table, возвращаемые функциями Inline и Multistatement, могут быть использованы непосредственно в запросе SELECT подобно обычной таблице.

Все рассмотренные типы функций могут содержать ни одного, один или более входных параметров одного из поддерживаемых SQL Server типов данных, за исключением типов данных timestamp, cursor и table. В теле функций (за исключением функций типа Inline) разрешается объявление локальных переменных, использование циклов, ветвлений и любых других программных конструкций. Также разрешается вызов других функций и хранимых процедур и создание внутри функции курсоров. Однако возвращаемые командой FETCH значения могут быть присвоены только переменным, созданным в теле функции.

При использовании команд INSERT, UPDATE и DELETE существует ограничение  разрешается работать только с наборами данных, хранящимися в переменных типа table и созданными в теле функции. Помимо указанных ограничений при разработке функций следует учитывать, что они не могут возвращать данные непосредственно клиенту, как это может делать хранимая процедура. То есть не разрешается использование в теле функции команды PRINT, а также команды SELECT для непосредственного возвращения данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]