42328

Триггеры, генераторы, исключения

Лабораторная работа

Информатика, кибернетика и программирование

Студент получает индивидуальный вариант исходных данных с кратким описанием предметной области, который используется при выполнении всех лабораторных работ. При этом каждая очередная лабораторная работа является продолжением выполненной ранее и поэтому они должны обязательно выполняться последовательно. Варианты заданий к лабораторной работе №5 № варианта Имя пользователя Имя файла БД Имя таблицы Бизнес-правило для поля 1 TEM001 SLRY.FDB Цех Дата_поступления 2 TEM002 STUFF.FDB Собрано День_недели 3 TEM003 STUFFPLUS.FDB Изделия Наименование 4 TEM004 TELEPHONE.

Русский

2013-10-29

133 KB

29 чел.

4     

  1.  Лабораторная работа №5. Триггеры, генераторы, исключения
    1.  Цель работы

Изучить используемые в Firebird триггеры, генераторы и исключения. Получить навыки работы с триггерами, генераторами и исключениями с помощью команд SQL и с помощью программы "IBExpert".

Время выполнения: 4 часа.

  1.   Исходные данные

Студент получает индивидуальный вариант исходных данных с кратким описанием предметной области, который используется при выполнении всех лабораторных работ. При этом каждая очередная лабораторная работа является продолжением выполненной ранее и поэтому они должны обязательно выполняться последовательно.

  1.  Используемые программы

Все операции выполняются с помощью приложения "IBExpert". Отчет создается в редакторе "OpenOffice.pro".

  1.  Теоретические сведения
    1.  Генераторы (Generators)

Генераторы используются для генерации уникальных номеров, используемых в ключевых полях (автоинкрементных полях). То есть они реализуют те же функциональные возможности в таблицах Firebird, что и поля с автоматическим приращением в других СУБД. Можно указать, чтобы числа генерировались, начиная с заданного начального значения.

Пример создания генератора:

CREATE GENERATOR MyGenerator;

SET GENERATOR MyGenerator TO 1000;

Генераторы непосредственно не привязываются к какому-либо полю. Они просто позволяют генерировать уникальные числа. Для этого используется функция Gen_ID(), встроенная в Firebird, которая генерирует целочисленные значения. Она берет генератор в качестве первого параметра и значение шага в качестве второго. Обычно приращение равно 1.

Обращаться к генератору можно только через функцию Gen_ID().


  1.  Бизнес-правила

В реальной жизни вопрос целостности базы данных связан с правилами, установленными у пользователя информационной системы. Например, в компании могут быть установлены такие правила:

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

Такие правила называются бизнес-правилами. В первом стандарте SQL считалось, что эти правила выходят за рамки ответственности СУБД и за их реализацию отвечает прикладная программа, осуществляющая доступ к базе данных. Впервые в 1986 году в СУБД Sybase было введено понятие триггер, что позволило включить реализацию бизнес-правил в базу данных.

  1.  Триггеры (Triggers)

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

В СУБД Firebird можно создавать триггеры, работающие при следующих шести условиях:

  •  до вставки записи (BEFORE INSERT);
  •  после вставки записи (AFTER INSERT);
  •  до удаления записи (BEFORE DELETE);
  •  после удаления записи (AFTER DELETE);
  •  до модификации записи (BEFORE UPDATE);
  •  после модификации записи (AFTER UPDATE).


В Firebird 2.5 триггер может срабатывать при возникновении одного из нескольких событий. Триггеры могут вызывать выполнение хранимых процедур *PPT, выполнять различные проверки и генерировать исключения. Обычно триггеры используются для задания сложных правил контроля целостности базы данных, которые невозможно реализовать с помощью ограничений.

Недостатком триггеров является их влияние на производительность операций с базой данных.

Синтаксис оператора создания триггера:

CREATE TRIGGER Имя FOR Таблица

  [ACTIVE | INACTIVE]

  {BEFORE | AFTER}

  <операция> [OR <операция> [OR <операция>]]

  [POSITION Номер]

AS [<список переменных>] <блок>;

   <операция> = {INSERT | UPDATE | DELETE}

  <список переменных> =

   DECLARE [VARIABLE] Переменная <тип данных>;

   [DECLARE [VARIABLE] Переменная <тип данных>; ...]

<блок> =

  BEGIN

  <составной оператор>

  [<составной оператор>...]

 END

<составной оператор> = <блок> | Оператор;

Параметры, входящие в этот оператор, пояснены в табл. 1.

Таблица  Параметры оператора создания триггера

Параметр

Описание

Имя

Уникальное название триггера.

Таблица

Название таблицы или просмотра, для которых создается триггер

ACTIVE | INACTIVE

Указывает будет ли работать триггер

BEFORE | AFTER

Обязательный параметр, показывающий когда будет срабатывать триггер

INSERT | UPDATE | DELETE

Одно из событий, на которые будет срабатывать триггер

POSITION Номер

Определяет порядок срабатывания триггера, когда имеется несколько триггеров, реагирующих на одно и то же событие. Номер – целое число между 0 и 32767

DECLARE [VARIABLE] Переменная <тип данных>

Описание локальной переменной, которую можно будет использовать только в этом триггере


Оператор 

Любой одиночный оператор языка хранимых процедур и триггеров Firebird

Внутри тела триггера доступны две контекстные переменные NEW и OLD, которые позволяют получить доступ к новым и старым значениям полей записи, при изменении которой был вызван триггер.

Пример генератора и триггера для создания автоинкрементного поля:

CREATE GENERATOR EMP_NO_GEN;

CREATE TRIGGER SET_EMP_NO FOR EMPLOYEE

ACTIVE BEFORE INSERT POSITION 0

AS

   BEGIN

  IF (NEW.EMP_NO IS NULL) THEN

     NEW.EMP_NO = GEN_ID(EMP_NO_GEN, 1);

END;

  1.  Исключения (Exceptions) и обработка ошибок 

Исключение – это определенная пользователем ошибка, которая имеет имя и связанный с ним текст сообщения.

Для создания исключения служит оператор:

CREATE EXCEPTION Имя 'Текст сообщения';

Для возбуждения исключения в теле триггера или хранимой процедуры служит оператор:

EXCEPTION Имя;

При возникновении исключения нормальный ход выполнения прерывается и Firebird ищет ближайший обработчик этого исключения в текущем блоке BEGIN … END. Если обработчика исключения в этом блоке нет, то Firebird поднимается на уровень выше (к внешнему блоку BEGIN … END) и ищет обработчик там, и т.д. Если обработчик исключения найден, то выполняется его код и далее управление передается на первый оператор за обработчиком исключения. В случае если было сгенерировано исключение, которое никто не обрабатывает, это исключение передается в клиентское приложение. Чаще всего это приводит к выдаче пользователю сообщения о произошедшей ошибке.

Синтаксис оператора для обработки исключений внутри тела триггера или хранимой процедуры имеет следующий вид:

WHEN {<ошибка> [, <ошибка> ...] | ANY} DO

  <составной оператор>


<ошибка> = {EXCEPTION Имя | SQLCODE Номер | GDSCODE Код_Ошибки} 

Параметры, входящие в этот оператор, описаны в табл. 2

Таблица

Параметр

Описание

ANY

Позволяет обработать все типы ошибок

EXCEPTION Имя

Обработка исключения, сгенерированного пользователем (оператором EXCEPTION)

SQLCODE Номер 

Обработка ошибки SQL

GDSCODE Код_Ошибки

Обработка ошибки Firebird

  1.  Операторы языка хранимых процедур и триггеров

 В этом разделе приведены некоторые из используемых при написании триггеров и хранимых процедур операторов, которые не были описаны выше.

IF … THEN … ELSE

Для реализации сложных алгоритмов сервер Firebird поддерживает операторы ветвления.

IF (условие) THEN <составной оператор> [ELSE <составной оператор>] 

FOR SELECT … DO

Представляет собой оператор выборки данных и обработки их в цикле по записям.

FOR <выражение select> DO <составной оператор>

WHILE … DO 

Оператор цикла.

WHILE (условие) DO <составной оператор>

  1.   Порядок выполнения работы

Лабораторную работу следует выполнять в следующем порядке:

  1.  Создать аналогично предыдущим лабораторным работам рабочую папку и назвать ее "ЛР5".
  2.  Открыть окно "Редактор скриптов" в приложении "IBExpert".
  3.  Используя кнопку   [Загрузить из файла] на панели инструментов, открыть диалоговое окно "Open SQL File" и с его помощью открыть файл сценария,  созданный при выполнении лабораторной работы №4.


  1.  Используя кнопку [Save as] на панели инструментов, сохранить загруженный сценарий в папке "sqledu02:\D:\Data\ЛР5".  
  2.  Изменить в сценарии путь до файла с базой данных, чтобы база данных создавалась в папке "ЛР5".  
  3.  Добавить в сценарий операторы создания генераторов, исключений и триггеров.
  4.  Создать для всех таблиц базы данных генераторы и триггеры для автоинкрементных полей (для первичных ключей).
  5.  Создать триггеры, реализующие ссылочную целостность, изменив одно из ограничений внешнего ключа. Команды создания этого внешнего ключа из сценария не удалять, а добавить команду удаления этого ограничения перед созданием триггеров. Триггеры должны обеспечивать каскадное обновление и удаление зависимых данных, а также запрет ссылки на отсутствующую запись.
  6.  Создать триггер, реализующий бизнес-правило в соответствии с выданным индивидуальным заданием. Для триггера должны присутствовать комментарии, поясняющие выполняемые операции.
  7.  Выполнить сценарий и сохранить его в папке "ЛР5".
  8.  Зарегистрировать созданную базу данных в программе "IBExpert" и подключиться к ней.
  9.  Создать в своей базе данных таблицу в диалоговом режиме. Она должна называться "TestTriggers" и содержать десять полей разных типов с произвольными именами. При создании автоинкрементного поля первичного ключа сразу указать необходимость создания для него генератора и триггера. Добавить в диалоговом режиме к этой таблице три триггера выполняющих произвольные действия. Скопировать в отчет сценарий создания этой таблицы и триггеров, который сгенерирует "IBExpert".
  10.  Создать в папке "ЛР5" резервную копию базы данных.
  11.  Создать и сохранить в папке "ЛР5" файл с отчетом о выполнении лабораторной работы, который должен называться "Отчет5-xx.odt", где xx — это номер варианта задания.   .
    1.  Варианты заданий

Вариант задания (Таблица 3) выбирается по формуле (N mod 24)+1, где N – последние две цифры зачетной книжки студента.

Таблица : Варианты заданий к лабораторной работе №5

№ варианта

Имя пользователя

Имя файла БД

Имя таблицы

Бизнес-правило для поля

1

TEAM001

SALARY.FDB

Цех

Дата_поступления


2

TEAM002

STUFF.FDB

Собрано

День_недели

3

TEAM003

STUFFPLUS.FDB

Изделия

Наименование

4

TEAM004

TELEPHONE.FDB

Абонент

Абонплата

5

TEAM005

TOOLS.FDB

Поставляет

Дата_изготовления

6

TEAM006

EXAMIN.FDB

Студент

Семейное_положение

7

TEAM007

LIBRARY.FDB

Книга

Дата_поступления

8

TEAM008

AVIA.FDB

Рейс

День_недели

9

TEAM009

SHOP.FDB

Ассортимент

Размер

10

TEAM010

HCOMMAND.FDB

Команда

Название

11

TEAM011

STUDENT.FDB

Студент

Общежитие

12

TEAM012

SERVIS.FDB

Квалификация

Оплата

13

TEAM013

REGION.FDB

Регион

Численность

14

TEAM014

OPTSHOP.FDB

Товар

Дата_поступления

15

TEAM015

OPTLEKI.FDB

Лекарства

Дата_изготовления

16

TEAM016

SPORTSMEN.FDB

Спортсмен

Вид_спорта

17

TEAM017

DANCING.FDB

Танцор

Возрастная_группа

18

TEAM018

BIRTHDOM.FDB

Мать

Дата_выписки

19

TEAM019

TENNIS.FDB

Спортсмен

Возраст

20

TEAM020

CURSES.FDB

Расценки

Стоимость

21

TEAM021

TEACHER.FDB

Преподаватель

Зарплата

22

TEAM022

HOSPITAL.FDB

Больной

Выписан

23

TEAM023

SOLDAT.FDB

Призывник

Дата_медкомиссии

24

TEAM024

YUSHOP.FDB

Изготовитель

Стаж

  1.      Ход работы 

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

Для создания триггеров с помощью программы "IBExpert" в диалоговом режиме необходимо выполнить следующие действия:

  1.  Подключиться к базе данных.
  2.  Открыть окно с таблицей, для которой будет создаваться триггер.
  3.  Перейти на вкладку "Триггеры" (Рис. 1).
  4.  Нажать в этом окне правую кнопку мыши на одном из событий, для которого будет создаваться триггер.


  1.  Откроется контекстное меню, в котором надо выбрать команду "Новый триггер".

  1.  В результате откроется окно создания триггера (рис. 2 или 3), в котором достаточно лишь ввести тело триггера, а затем нажать кнопку [Компилировать триггер] (Ctrl+F9).

 

Переключение между двумя режимами просмотра и редактирования триггера, показанными на рис. 2 и 3 производится кнопкой [Включить/Выключить "ленивый" режим].


Создание с помощью программы "IBExpert" в диалоговом режиме генераторов и исключений происходит следующим образом:

  1.  Открывается окно "Генераторы" либо "Исключения". Для этого можно, на-пример, выбрать команду главного меню База данных > Новый генератор или База данных > Новое исключение.
  2.  В окне "Генераторы" или "Исключения" вводятся для генератора – имя и начальное значение, а для исключения – имя и текст сообщения. Можно ввести данные сразу о нескольких генераторах и исключениях.
  3.  После ввода данных необходимо нажать кнопку [Компиляция] (F9), которая приведет к автоматической генерации необходимых операторов и их выполнению.
    1.  Отчет о выполнении работы

Отчет о выполнении лабораторной работы №5 необходимо оформить на листах формата A4. Для создания отчета следует использовать шаблон отчета для соответствующей лабораторной работы, который необходимо открыть с помощью приложения OpenOffice.

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

  1.  Цель работы.
  2.  Краткое описание предметной области в соответствии с вариантом.
  3.  Данные о версии СУБД, использованной в лабораторной работе.
  4.  Перечисление всех использованных при выполнении лабораторной работы команд главного меню приложения "IBExpert" с краткими пояснениями выполняемых действий.
  5.  Перечень файлов, полученных при выполнении лабораторной работы с указанием их имен, места расположения, даты изменения и размеров (сценарий, база данных, резервная копия базы данных, файл с отчетом).


  1.  Письменные ответы на контрольные вопросы.
  2.  Выводы.
  3.  Распечатку сценария создания базы данных с комментариями, которые должны содержать сведения об авторе, дате создания, всех выполняемых действиях и пояснения к ограничениям целостности.

  1.  Контрольные вопросы
  2.  Что такое бизнес-правила?
  3.  Какие существуют способы реализации бизнес-правил?
  4.  Какие преимущества и недостатки имеет реализация бизнес-правил на сервере и в клиенте?
  5.  Что называется триггером? При каких событиях работают триггеры в Firebird? Для чего используются переменные NEW и OLD?
  6.  Как в триггере запретить выполнение операции?
  7.  Какие преимущества и недостатки имеют триггеры?
  8.  Что такое генератор? Как получить значение генератора?
  9.  Для чего используется функция GEN_ID?
  10.  Что такое исключение?
  11.  Как происходит процесс обработки исключений?
  12.  Какие ошибки могут быть кроме исключений, созданных пользователем?

*


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

    ?


 

А также другие работы, которые могут Вас заинтересовать

47379. Установление типа производства 49 KB
  Тип производства и соответствующая ему форма организации работы определяют характер ТП и его построение. Поэтому прежде чем приступить к проектированию ТП механической обработки деталей, необходимо исходя из заданной производственной программы
47380. Маркетинг підприємства «Бастардо» на ринку алкогольної продукції 1.87 MB
  Основна мета даної дипломної роботи полягає у дослідженні особливостей складання та реалізації маркетингової програми на діючому підприємстві оптової торговлі, що здійснює діяльність у галузі торгівлі безалкогольними напоями та пивом
47381. Кризис банковской системы Российской Федерации 197 KB
  В этой ситуации Правительство и Банк России посчитали необходимым и правильным принять комплекс мер направленный на нормализацию финансовой и бюджетной политики. С 17 августа 1998 года Банк России перешел к проведению политики плавающего курса рубля в рамках новых границ валютного коридора которые были определены на уровне от 6 до 95 руб. В соответствии с положениями Устава МВФ Правительство и Банк России ввели временные ограничения для резидентов Российской Федерации на осуществление валютных операций капитального характера....
47382. Исследование организации оплаты и стимулирования труда и направления ее совершенствования на предприятии (на примере УКП « Полоцк – торг, г. Полоцк) 232.01 KB
  ДИПЛОМНАЯ РАБОТА Исследование организации оплаты и стимулирования труда и направления ее совершенствования на предприятии на примере УКП Полоцк – торг г. ЗАРАБОТНАЯ ПЛАТА СИСТЕМА ОПЛАТЫ ТРУДА РЕГУЛИРОВАНИЕ ЗАРАБОТНОЙ ПЛАТЫ МОТИВАЦИЯ ТРУДА ОРГАНИЗАЦИЯ ОПЛАТЫ И СТИМУЛИРОВАНИЯ ТРУДА Объектом исследования выступает УКП Полоцк торг предметом исследования организации оплаты и стимулирования труда. Целью данной дипломной работы является анализ организации оплаты и стимулирования труда на УКП Полоцк торг и разработка направлений ее...
47383. Разработка рекомендаций по эффективному использованию денежных средств на примере ООО «Вахрушевец» 967 KB
  На расчетном счете сосредотачиваются свободные денежные средства и поступления за реализованную продукцию, выполненные работы и услуги, краткосрочные и долгосрочные ссуды, получаемые от банка, и прочие зачисления
47384. Организация логистических процессов распределения товаров (на примере ОАО "Полоцкий молочный комбинат") 331.39 KB
  Предмет исследования: распределительная логистика Цель работы: обоснование актуальности создания распределительного центра продукции ОАО Полоцкий молочный комбинат в городе Риге обоснование актуальности использования услуг дистрибьютора в городе Пскове и актуальность внедрения логистического программного обеспечения на предприятии и оценка экономической эффективность предложенных мероприятий. Исследование и разработки: изучены основные аспекты логистических процессов распределения товаров проанализирована организация логистической...
47385. Разработка маркетинговой стратегии развития организации на примере ООО “Антарес” 170.01 KB
  Раздел 1 Маркетинг как философия производства Содержит анализ литературных источников посвященных рассмотрению теоретических аспектов маркетинга классификации услуг анализ потребителей и их потребностей сегментации рынка услуг по пошиву одежды особенностям стимулирования сбыта в данной отраслевой группе влияние рекламы как основного элемента коммуникационного воздействия на потребителя.1 Понятие маркетинга особенности маркетинга услуг.2 Эффективность внедряемой услуги 655 Правовая часть...
47386. Влияние самооценки на успешность обучения в младшем школьном возрасте 383.5 KB
  Широкое распространение феномена оценки в учебновоспитательном процессе школы послужило причиной того что оценивание учителем результатов учебной деятельности учащихся и самооценивание выделилось в последние годы в самостоятельное направление. Согласно теории учебной деятельности оценочная деятельность порождает потребность ученика или учителя получить информацию о том соответствует или нет качество знаний и умений учащихся по предмету требованиям программы. Целью оценочной деятельности является таким образом контроль успеваемости...
47387. Разработка миссии и целей компании «Ultra» 254.18 KB
  В первую очередь целевое начало в деятельности организации возникает потому что организация это объединение людей преследующих определенные цели. так же как и те кто являются хозяевами организации или работают в организации преследуя свои собственные цели при взаимодействии с организацией придают ее существованию определенную направленность и тем самым развивают целевое начало в деятельности организации. Цели и задачи исследования. Первая глава посвящена теоретическому осмыслению понятий миссия цели система целей и др.