Приветствую всех посетителей сайта Info-Comp.ru! Из данного материала Вы узнаете, для чего нужны пользовательские функции в языке T-SQL, мы рассмотрим те преимущества, которые получим, если будем их использовать, и тем самым сформулируем их назначение.
Пользовательские функции в T-SQL
Пользовательские функции (UDF – User Defined Functions) – это функции, которые создаём мы — пользователи, т.е. программисты T-SQL.
В Microsoft SQL Server пользовательские функции реализованы в виде объектов, которые хранят заложенный в функцию алгоритм. Обращаясь к этим объектам, мы тем самым запускаем этот алгоритм.
В функциях мы можем обращаться к данным и проводить различные расчеты, при этом мы можем программировать на T-SQL, т.е. использовать переменные, условные конструкции, циклы и даже вызывать другие функции.
Однако обязательно стоит отметить, что в функциях можно использовать не все возможности языка T-SQL, в частности мы не можем в них модифицировать данные, т.е. использовать UPDATE, INSERT, DELETE, а также мы не можем использовать конструкцию обработки ошибок TRY…CATCH, кроме этого есть и другие ограничения.
Для всех этих целей в языке T-SQL есть возможность написания хранимых процедур, в которых нет практически никаких ограничений в части языковых конструкций. Более подробно о том, чем отличаются функции от хранимых процедур, мы разговаривали в материале.
Заметка! Чем отличаются функции от хранимых процедур в T-SQL.
Ну а сейчас давайте перейдём к теме статьи и поговорим о назначении функций языка T-SQL, т.е. для чего нужны нам эти функции.
Назначение пользовательских функций в T-SQL
Реализация алгоритмов и расчетов
Основное назначение функций — это, конечно же, реализация каких-то небольших алгоритмов, а может быть и больших, с целью получения расчетного значения, а так как функции хранятся в виде объектов, мы можем повторно обращаться к этому алгоритму и тем самым в целом упрощать процесс работы с данными.
Модульное программирование
Функции позволяют реализовывать модульное программирование, так как создав функцию один раз, т.е. сохранив ее в базе данных, Вы можете вызывать эту функцию любое количество раз в любом месте Вашего приложения. При этом Вы можете редактировать алгоритм работы функции независимо от исходного кода приложения, т.е. не важно, где она используется, алгоритм изменится везде.
Устранение дублирования кода
Одно из важных правил программирования звучит следующим образом:
Если один и тот же участок кода используется в исходном коде приложения более 1 раза, то его необходимо вынести в функцию.
При программировании с использованием языка T-SQL это особенно актуально, т.е. любой код, который полностью повторяется 2 и более раз в одной или нескольких SQL инструкциях и процедурах, выносите в функцию, и везде, где необходимо использовать этот код, просто вызывайте эту функцию.
Легкое сопровождение кода
Продолжая разговор о модульном программировании, функции позволяют сделать сопровождение кода более легким.
Ведь если в приложении Вы используете вызов функций, то в случае возникновения необходимости внести изменение в алгоритм работы с данными, который заложен в этой функции, достаточно один раз внести изменение в базу данных в исходный код функции. Иными словами, нет необходимости вносить изменения в само клиентское приложение, перекомпилировать и осуществлять обновление, т.е. функции можно редактировать независимо от исходного кода приложения.
Кроме этого вынесение SQL кода в функции снизит уровень несогласованности кода клиентского приложения, и таких ситуаций возникать не будет, когда в одном месте SQL код возвращает одни данные, а вроде бы тот же самый SQL код, но в другом месте, возвращает другие данные.
Заметка! Рейтинг популярности систем управления базами данных (СУБД).
Более быстрое выполнение
Функции обеспечивают более быстрое выполнение SQL кода. Как и хранимые процедуры, функции компилируются один раз, и тем самым кэшируют план выполнения, а затем, в случае обращения к этой функции, повторно используют этот план выполнения. Это означает, что функция не нуждается в повторном анализе и повторной оптимизации при каждом использовании, что приводит к гораздо более быстрому выполнению.
Сокрытие сложности
Как и хранимые процедуры, функции скрывают детали реализации действий, выполняемых в базе данных.
И это хорошо, ведь если в разработке приложения участвуют несколько разработчиков, при этом одни разработчики разрабатывают интерфейс клиентского приложения, а другие разрабатывают базу данных и всю логику работы с ней, то в таких ситуациях разработчикам, которые работают с интерфейсом клиентского приложения, не нужно знать алгоритм действий выполняемых в базе данных для получения тех или иных значений, они должны знать только то, что возвращает функция и как ее использовать, т.е. какие параметры она принимает.
Снижение сетевого трафика между клиентами и сервером
Использование функций позволяет немного сократить сетевой трафик между сервером и клиентом, так как по сети отправляется только вызов функции.
Кроме этого, если действия в клиентском приложении подразумевают фильтрацию данных на основе какого-то сложного алгоритма, то вынеся этот алгоритм в функцию, а затем эту функцию использовав для фильтрации данных в SQL запросе, мы можем уменьшить количество строк данных, возвращаемых клиенту.
Примечание! У функций есть и недостатки, например, то, что они могут значительно снизить производительность SQL запроса, если использовать их в предикате в секции JOIN или WHERE, поэтому не нужно использовать функции для формирования условий в SQL запросах.
Подведение итогов
Давайте подведем итог на основе всего вышесказанного и сформулируем итоговое назначение пользовательских функций в языке T-SQL.
Заметка! Если Вас интересует язык SQL, то рекомендую почитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней язык SQL рассматривается как стандарт, чтобы после прочтения данной книги можно было работать с языком SQL в любой системе управления базами данных.
На сегодня это все, надеюсь, материал был Вам полезен, пока!