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.  Какие ошибки могут быть кроме исключений, созданных пользователем?

*


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

    ?


 

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

37417. Пифагор и «Пифагорейский союз» 76 KB
  политический союз пифагорейцев перестал существовать. Верования пифагорейцев как и орфиков касались души и метемпсихоза и по своему содержанию были далеки от ионийской философии. Это верование орфиков и пифагорейцев возникло из их убежденности в совершенстве разнообразии потенций и устойчивости души придающей крепость тленному и легко уничтожимому телу. Это была характерная для пифагорейцев и не только для них попытка объяснить почему душа находится в вынужденной связи с телом.
37418. Расчет параметров линейной непрерывной акустической антенны 1.16 MB
  Выбор конструкции антенны. Таким образом гидроакустические антенны могут рассматриваться либо как передающие либо как приемные устройства в зависимости от удобства их рассмотрения в каждом конкретном случае. Формируемые элементами антенны пространственновременные выборки значений поля представляют ту первичную информацию использование которой позволяет найти оценки параметров сигнала.
37419. Организация управления воздушным движением в районе аэродрома 1.31 MB
  Инструкция по производству полетов ИПП Общие положения ИПП аэродрома Кишинев разработана на основании Воздушного кодекса РФ Федеральных правил использования воздушного пространства РФ Федеральных авиационных правил полетов в воздушном пространстве РФ Федеральных авиационных правил Подготовка и выполнение полетов в гражданской авиации РФ Федеральных авиационных правил Организация воздушного движения в РФ Федеральных авиационных правил Осуществление радиосвязи в воздушном пространстве РФ Положения об оперативных органах о...
37420. Предмет философии 78.5 KB
  Предмет философии. Основная проблема: соотношение философии и науки по предмету. Цель: определить предмет философии как отношение человека к миру так что аспекты этого отношения онтологический гносеологический и аксиологический определяют основные разделы философии а философия рассматривается как теоретическое мировоззрение. Множество определений философии.
37421. ПОЛИТОЛОГИЯ. КУРС ЛЕКЦИЙ 718.5 KB
  Методология политической науки. 2 1 2 Власть в политике Природа и сущность политической власти. Субъекты политики и ресурсы власти 2 1 3 Политические системы общества Сущность структура и функции политической системы. 2 6 Выборы и избирательный процесс Роль выборов в политической жизни общества.
37422. Модель: оцінка наявної ситуації та впливу чинників ринку на розвиток системи або її суб’єкта 206.99 KB
  Повільність та негаразди пов’язані з цим процесом можна пояснити тим що більшість підприємців та полісімейкерів особи що приймають політичні рішення не усвідомлюють того що кожний суб’єкт ринку взаємопов’язаний з будьяким іншим а отже має вплив фактично на всю ринкову систему. Які б не були думки з цього приводу дуже велику роль в економічних системах відіграють закони ринку зокрема їх математичне вираження. Таким чином завданням моделі що ми її будемо будувати є оцінка наявної ситуації та впливу чинників ринку на розвиток системи...
37423. Автоматизированное рабочее место оператора автоматизированного переговорного пункта и информационной системы 286.94 KB
  Междугородная телефонная связь должна работать четко, бесперебойно. Работники междугородной телефонной связи на основе сознательного, рыночного отношения 'к труду и строгой производственной дисциплины должны культурно и внимательно обслуживать государственные учреждения и предприятия, общественные организации и население Украины.
37425. Влияние инфляционных процессов на результаты финансовой деятельности предприятия и на уровень жизни населения РФ 335.5 KB
  Денежная масса в обращении достигала 496 квинтиллионов марок а денежная единица обесценилась в триллион раз. Невозможно найти серьёзного учёногоэкономиста который считал бы систематический рост цен безобидным явлением. Опережающий рост цен на товары независимо от длинны инфляционной волны представляет собой крайне болезненный процесс для любого даже высокоразвитого нацио нального хозяйственного комплекса[15] . В настоящее время инфляция один из самых опасных процессов негативно воздействующих на финансы денежную и...