- •Кафедра «Информационные технологии»
- •Основы языка Transact-SQL
- •9. Хранимые процедуры
- •Последний подход лучше, т.к. позволяет
- •ХП представляют собой фрагменты программного кода на T-SQL, которые
- •Основное преимущество ХП -
- •Кроме того, ХП обладают
- •• ХП поддерживают модульное
- •• ХП проще использовать: они могут состоять из десятков и сотен команд, но
- •• Хранение процедур в том же
- •Для обеспечения целостности данных, а также в целях безопасности,
- •В результате:
- •ХП существуют независимо от
- •Изменять код ХП разрешается
- •9.2. Хранимые процедуры
- •Системные ХП размещаются в
- •Практически все действия по
- •Локальные ХП размещаются и выполняются в пользовательских БД.
- •Временные локальные процедуры доступны только из
- •Временные глобальные процедуры доступны в любой
- •Удаленные хранимые процедуры можно вызывать с сервера, отличного от текущего сервера. При этом
- •Еще один тип ХП - расширенные ХП
- •ХП можно создавать:
- •В ХП могут использоваться все операторы SQL, кроме операторов
- •Синтаксис оператора создания ХП
- •Параметры оператора создания ХП
- •При обращении из тела ХП к объектам той же БД можно использовать укороченные
- •Номер в имени (номер версии или версия) – номер ХП, однозначно определяющий ее
- •Использование в имени процедуры
- •Для передачи входных и выходных
- •Для определения типа данных,
- •Ключевое слово OUTPUT означает,
- •При указании ключевого слова OUTPUT значение соответствующего
- •Ключевое слово VARYING применяется совместно с параметром OUTPUT, имеющим тип CURSOR. Оно определяет,
- •Т.к. сервер кэширует план исполнения
- •Параметр FOR REPLICATION
- •Ключевое слово AS размещается в начале тела ХП, т.е. набора команд
- •Для выполнения ХП - команда:
- •Использование ключевого слова
- •Из синтаксиса команды EXECUTE
- •Если требуется опустить параметры, имеющие значения по умолчанию, то
- •Порядок создания ХП с помощью
- •4. В открывшемся окне вводятся операторы Transact-SQL создаваемой ХП. При этом предлагается готовый
- •В целом, создание ХП предполагает решение следующих задач:
- •Пример 1. Создание и использование ХП, возвращающей список студентов заданной группы (входной параметр
- •Вызов данной процедуры (допустим, что это единственная команда передаваемого на исполнение пакета) для
- •Пример 2. Процедура без параметров -
- •Для обращения к процедуре можно использовать команды:
- •Пример 3. Процедура без параметров
- •Пример 4. Процедура с двумя параметрами - уменьшение цены товара заданного типа на
- •Для обращения к процедуре можно использовать одну из команд:
- •Если данную процедуру изменить, задав значения параметров по умолчанию (остальной код прежний):
- •Пример 5. Процедура с входными и
- •Для обращения к процедуре можно использовать набор команд:
- •10. Триггеры
- •DML-триггеры - применение:
- •Триггеры – основные свойства:
- •• Триггеры – полезное, но и «опасное»
- •Команды создания триггеров
- •В последних версиях СУБД MS SQL Server (начиная с 2005) возможно создание двух
- •DML-триггеры выполняются при
- •10.1. DML-триггеры
- •Параметр WITH ENCRYPTION
- •Ключевые слова INSERT (Вставить),
- •В отличие от ХП и функций
- •Триггер AFTER запускается после успешного завершения SQL Server всех
- •Триггер INSTEAD OF выполняется вместо операции, вызвавшей запуск
- •Для таблицы или представления можно создать любое число триггеров AFTER, но для каждой
- •При выполнении команд добавления,
- •В зависимости от типа операции (INSERT, DELETE, UPDATE), вызвавшей выполнение DML-триггера, содержимое таблиц
- •• команда DELETE – в таблице deleted будут содержаться все
- •• команда UPDATE – при ее выполнении в таблице deleted находятся старые значения
- •Для получения информации о количестве строк, которое будет изменено при успешном завершении
- •Важно: DML-триггер запускается
- •Например, если DML-триггер «обнаружил», что из 100 вставляемых, изменяемых или удаляемых строк только
- •Триггер выполняется как
- •Для получения списка столбцов, измененных при выполнении команд
- •Функция COLUMNS_UPDATED()
- •Пример 1. Создание триггера типа AFTER, который запрещает обновлять
- •Так как триггер расположен в одной
- •Пример 2. Создание триггера типа INSTEAD OF, срабатывающего на попытку удаления строк из
- •10.2. DDL-триггеры
- •Например, нужно запретить всем
- •Общий синтаксис для создания DDL-
- •Пример 1. DDL-триггер, запрещающий удаление или изменение таблицы и генерирующий соответствующее сообщение:
- •Для получения информации о событии (DDL-операции) можно использовать встроенную функцию EVENTDATA(), которая возвращает
- •Пример 2. Создание и работа DDL- триггера, который будет вызываться при любом изменении
- •Затем создается триггер:
- •Для проверки триггера выполним две
- •Введем команду, которая позволит выбрать данные из ранее созданной таблицы аудита с именем
Для определения типа данных,
который будет иметь параметр ХП,
подходят любые типы данных T-SQL,
включая определенные
пользователем.
Но тип данных CURSOR может
быть использован только как
выходной параметр ХП, т.е. с
указанием ключевого слова OUTPUT.
31
Ключевое слово OUTPUT означает,
что соответствующий параметр служит
для возвращения данных из ХП. Но это
не значит, что такой параметр не подходит для передачи значений в ХП.
Указание ключевого слова OUTPUT предписывает серверу при выходе из ХП присвоить текущее значение параметра локальной переменной, которая была указана при вызове
процедуры в качестве значения
параметра.
32
При указании ключевого слова OUTPUT значение соответствующего
параметра при вызове процедуры
может быть задано только с помощью
локальной переменной.
Не разрешается использование любых выражений или констант, допустимое
для обычных параметров.
33
Ключевое слово VARYING применяется совместно с параметром OUTPUT, имеющим тип CURSOR. Оно определяет, что выходным параметром будет
результирующее множество.
Ключевое слово DEFAULT представляет собой значение, которое будет принимать соответствующий параметр по умолчанию. Значение этого параметра при
вызове процедуры можно не указывать
34
явно.
Т.к. сервер кэширует план исполнения
запроса и компилированный код, то при
последующем вызове ХП будут
использоваться уже готовые значения.
Но в некоторых случаях требуется выполнять перекомпиляцию кода ХП. Указание ключевого слова RECOMPILE предписывает системе создавать план выполнения ХП при каждом ее вызове.
35
Параметр FOR REPLICATION
задается при репликации данных и
включении создаваемой ХП в
качестве статьи в публикацию.
Ключевое слово ENCRYPTION предписывает серверу выполнить шифрование кода ХП, что может
обеспечить защиту от использования авторских алгоритмов, реализующих работу ХП.
36
Ключевое слово AS размещается в начале тела ХП, т.е. набора команд
SQL, с помощью которых и будет реализовываться то или иное действие.
В теле ХП могут применяться почти все команды SQL, объявляться
транзакции, устанавливаться
блокировки и вызываться другие ХП.
Выход из ХП можно выполнить с помощью команды RETURN. 37
Для выполнения ХП - команда:
Если вызов ХП - не единственная команда в пакете, то команда EXECUTE обязательна
(в противном случае эту команду можно опустить). Также эта команда требуется
для вызова процедуры из тела другой
процедуры или триггера. |
38 |
|
Использование ключевого слова
OUTPUT при вызове ХП разрешается
только для параметров, объявленных с
параметром OUTPUT при создании ХП.
Если при вызове ХП для параметра указывается ключевое слово DEFAULT, то используется значение по умолчанию. Слово DEFAULT разрешается только для
тех параметров, для которых
определено значение по умолчанию.
39
Из синтаксиса команды EXECUTE
видно, что имена параметров могут
быть опущены при вызове процедуры.
Но в этом случае нужно указывать значения для параметров в том же
порядке, в каком они перечислялись
при создании процедуры.
Присвоить параметру значение по умолчанию, просто пропустив его при перечислении, нельзя.
40