Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6сем ПБЗ шпоры.doc
Скачиваний:
83
Добавлен:
27.10.2018
Размер:
2.74 Mб
Скачать

55. Общие сведения о хранимых процедурах и триггерах.

В современной модели клиент/сервер бизнес-логика разделена между клиентом и сервером. На сервере бизнес-логика реализована в виде хранимых процедур – специальных программных модулей, которые хранятся в БД и управляются непосредственно СУБД.

Хранимая процедура – это специальная процедура, которая выполняется сервером баз данных. Хранимые процедуры пишутся на процедурном языке, который зависит от конкретной СУБД. Для написания хранимых процедур для MS SQL Server используется расширенный стандарт языка SQL – Transact-SQL. Хранимая процедура здесь – это последовательность операторов Transact-SQL, хранящихся в БД. Хранимые процедуры предварительно откомпилированы, поэтому их эффективность выше, чем обычных запросов. Они выполняются непосредственно на сервере.

Существует два вида хранимых процедур: системные и пользовательские. Системные хранимые процедуры предназначены для получения информации из системных таблиц и выполнения различных служебных операций и особенно полезны при администрировании базы данных. Пользовательские хранимые процедуры создаются непосредственно разработчиками или администраторами базы данных. Полезность хранимых процедур определяется в первую очередь высокой (по сравнению с обычными Transact-SQL запросами) скоростью их выполнения. Однако наибольший эффект достигается при выполнении многократно повторяющихся операций. Пользовательские хранимые процедуры применяются при решении практически любых задач. Пользователь может получить право выполнения хранимой процедуры, даже если он не имеет права доступа к объектам, к которым обращается программа.

Хранимая процедура вызывается явно, т.е. при непосредственном обращении к процедуре из клиентского приложения, работающего с базой данных. Хранимые процедуры используются для извлечения или изменения данных в любое время. Хранимые процедуры могут принимать аргументы при запуске и возвращать значения в виде результирующих наборов данных.

Логика БД реализуется с помощью триггеров. Триггер – это специальный тип хранимой процедуры, которая автоматически выполняется при каждой попытке изменить данные. Триггер всегда связан с конкретной таблицей и выполняется тогда, когда при редактировании этой таблицы наступает событие, с которым он связан (например, вставка, удаление или обновление записи). Каждая таблица может иметь произвольное количество триггеров любых типов. После операций вставки, обновления, удаления может быть запущен триггер, который в результате приведет к вычислению бизнес-правил или к выполнению определенных действий. При удалении таблицы, имеющей триггеры, все они также удаляются.

Триггеры обеспечивают целостность данных, предотвращая их несанкционированное или неправильное изменение. Триггеры не принимают параметров и не возвращают значений. Они выполняются неявно, то есть триггер запускается только при попытке изменения данных. Триггеры могут иметь несколько уровней вложенности (например, в СУБД MS SQL Server триггеры имеют до 32 уровней вложенности), то есть выполнение одного триггера инициирует выполнение другого триггера. Триггер является частью транзакции, следовательно, если триггер не выполнятся, то отменяется вся транзакция. И наоборот, если какая-то часть транзакции не выполнилась, то и триггер будет отменен.

Проблемы, связанные с использованием триггеров

  • Если одно и то же событие вызывает запуск нескольких разных триггеров, то последовательность их активизации может оказаться, с одной стороны, важной, а с другой — неопределенной.

  • Могут возникать цепочки запуска триггеров, при которой запуск триггера Т1 вызывает активизацию триггера Т2, который вызывает активизацию триггера ТЗ и т.д.

  • Запуск триггера может даже снова вызвать рекурсивный запуск самого этого триггера.

  • В результате наличия триггеров даже "простые" операции INSERT, DELETE или UPDATE могут приводить к такому эффекту, который принципиально отличается от ожидаемого пользователем.

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