Приветствую Вас на сайте Info-Comp.ru! Из данного материала Вы узнаете, для чего нужны хранимые процедуры в языке T-SQL, мы рассмотрим основные возможности хранимых процедур и преимущества их использования.
Заметка! Что такое T-SQL. Подробное описание для начинающих.
- Хранимые процедуры в T-SQL
- Назначение хранимых процедур в T-SQL
- Возможности хранимых процедур
- Преимущества хранимых процедур
- Повышение безопасности
- Устранение дублирования кода
- Легкое сопровождение кода
- Повышение производительности
- Сокрытие сложности
- Снижение сетевого трафика между клиентами и сервером
- Подведение итогов
Хранимые процедуры в T-SQL
Хранимая процедура – это объект базы данных, который хранит набор инструкций языка T-SQL, реализующих определённый алгоритм.
Хранимые процедуры используются в языке T-SQL для реализации бизнес логики, каких-то алгоритмов, расчетов, а также для написания различных инструкций администрирования баз данных и сервера, которые периодически необходимо выполнять.
Иными словами, хранимые процедуры – это своего рода программы внутри базы данных, которые хранят реализованный нами алгоритм, и в случае запуска этих программ выполняют этот алгоритм.
Примечание! В данном материале речь идет о пользовательских хранимых процедурах, которые создаем мы с Вами, т.е. программисты T-SQL.
Назначение хранимых процедур в T-SQL
Чтобы ответить на вопрос: для чего нужны хранимые процедуры? и определить их назначение, необходимо рассмотреть возможности, которые нам предоставляют хранимые процедуры, и те преимущества, которые мы получим, если будем их использовать. Именно это и определяет назначение хранимых процедур, т.е. для чего они созданы.
Возможности хранимых процедур
Заметка! Чем отличаются функции от хранимых процедур в T-SQL.
Преимущества хранимых процедур
Повышение безопасности
Использование хранимых процедур повышает безопасность по нескольким причинам:
- Предоставляя пользователю доступ к хранимой процедуре, мы можем не предоставлять прямой доступ к объектам, над которыми будут выполняться операции в процедуре. Ведь процедура сама проверяет, какие из операций могут выполняться, и защищает объекты базы данных;
- При удаленном вызове хранимой процедуры доступна только внешняя информация о вызове (название хранимой процедуры и название параметров). Имена таблиц и других объектов базы данных не видны, тем самым происходит сокрытие информации и мы скрываем детали реализации. Таким образом, пользователи хранимой процедуры или злоумышленники не смогут внести неправомерные изменения в алгоритм, выполняемый хранимой процедурой;
- Использование параметров в хранимых процедурах помогает предотвратить атаки типа «SQL-инъекция». Так как входные параметры обрабатываются как литеральные значения, а не как исполняемый код, то злоумышленнику становится труднее вставить и выполнить вредоносную инструкцию.
Устранение дублирования кода
SQL код, включающий многошаговые операции с базой данных, который многократно используется в приложении в разных местах, можно вынести в хранимую процедуру, тем самым устранить необходимость копирования одного и того же кода. Как результат, у Вас уменьшится общий объем кода за счет отсутствия повторяющихся участков кода.
Легкое сопровождение кода
Когда весь SQL код и заложенный в нем алгоритм вынесен в хранимые процедуры, а клиентское приложение лишь осуществляет вызов этих процедур, то сопровождать такое приложение становится гораздо легче. Ведь в случае возникновения необходимости внести изменение в алгоритм работы с данными, который заложен в хранимой процедуре, достаточно один раз внести изменение в базу данных в код хранимой процедуры. Иными словами, нет необходимости вносить изменения в само клиентское приложение, перекомпилировать и осуществлять обновление.
Кроме этого вынесение всего SQL кода в хранимые процедуры снизит уровень несогласованности кода клиентского приложения, и таких ситуаций возникать не будет, когда в одном месте SQL код выполняет одни изменения в базе данных, а вроде бы тот же самый SQL код, но в другом месте, выполняет совершенно другие изменения в базе данных. С хранимыми процедурами Вы будете вносить изменения только в одном месте – в исходном коде хранимой процедуры.
Заметка! Обзор инструментов для работы с Microsoft SQL Server.
Повышение производительности
Microsoft SQL Server компилирует хранимую процедуру и создает план выполнения один раз, а затем повторно использует этот план выполнения. Это приводит к повышению производительности в случае многократного вызова хранимой процедуры, ведь теперь обработчику запросов не нужно создавать новый план и поэтому обработка процедуры занимает меньше времени.
Примечание! Если в таблицах и в данных, с которыми работает хранимая процедура, произошли значительные изменения, то наличие предварительно скомпилированного плана наоборот может вызвать замедление работы процедуры. В этом случае необходимо принудительно перекомпилировать процедуру, и тем самым создать новый план выполнения.
Сокрытие сложности
В разработке приложения нередко участвуют достаточно много разработчиков, а если говорить о крупных информационных системах, то разработчики могут исчисляться и сотнями. При этом одни программисты разрабатывают интерфейс клиентского приложения, а другие разрабатывают базу данных и всю логику работы с ней.
И в таких ситуациях разработчикам, которые работают с интерфейсом клиентского приложения, совсем необязательно знать алгоритм выполнения определённых действий в базе данных, который заложен в SQL инструкциях. Более того, они не должны его знать.
Заметка! Чем отличается инструкция THROW от RAISERROR в T-SQL.
Хранимые процедуры как раз и скрывают алгоритм действий в базе данных и всю его сложность. Иными словами, если, например, разработчику клиентского приложения потребовалось использовать функционал добавления нового пользователя этого приложения, то он должен знать только название хранимой процедуры и описание ее параметров, а что конкретно она там делает и как именно создает пользователя, он знать не должен.
Использование хранимых процедур T-SQL является преимуществом и для разработчиков интерфейса приложения, так как в этом случае им просто легче программировать, им не нужно писать запутанные SQL инструкции, они могут просто вызывать хранимые процедуры, более того, так у них формируется полноценная абстракция их классов, в случае с ООП.
Снижение сетевого трафика между клиентами и сервером
Использование хранимых процедур позволяет существенно сократить сетевой трафик между сервером и клиентом, так как по сети отправляется только вызов на выполнение хранимой процедуры. Иными словами, без инкапсуляции кода, предоставляемой процедурой, по сети нам бы пришлось пересылать все строки кода, которых может быть достаточно много.
Подведение итогов
Давайте подведем итог на основе всего вышесказанного и сформулируем итоговое назначение хранимых процедур в языке T-SQL.
Заметка! Если Вас интересует язык SQL, то рекомендую почитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.
На сегодня это все, надеюсь, материал был Вам полезен, пока!