
- •Практический раздел содержание
- •Лабораторная работа №1
- •Основные понятия диаграмм классов uml
- •Классы, атрибуты, операции
- •Категории связей. Связь-зависимость
- •Связи-обобщения и механизм наследования классов в uml
- •Связи-ассоциации: роли, кратность, агрегация
- •Получение схемы реляционной базы данных из диаграммы классов uml
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •3Апрос 6-2-1
- •3Апрос 6-2-2
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Создание макроса
- •Сведения о построителе макросов
- •Создание изолированного макроса
- •Создание группы макросов
- •Создание внедренного макроса
- •Изменение макроса
- •Использование условий для контроля за действиями макроса
- •Примеры условных выражений в макросах
- •Лабораторная работа №9
- •Описание
- •Порядок обработки элементов оператора select:
- •Конструкция where
- •Конструкция group by
- •Конструкция having
- •Конструкция order by
- •Seller (Продавцы)
- •Sale (Продажи)
- •Supplier (Поставщики)
- •Goods (Товары)
- •Model (Модели)
- •Custom (Заказ)
- •Простые запросы
- •Агрегатные функции
- •Лабораторная работа №10
- •Многотабличные запросы
- •Примеры многотабличных запросов
- •Подзапросы и многотабличные запросы
- •Лабораторная работа №11
- •Операторы манипулирования данными
- •Лабораторная работа №12
- •Лабораторная работа №13
- •Примеры
- •Синтаксис
- •Примеры
- •Лабораторная работа №14
- •Лабораторная работа №15
- •Лабораторная работа №16
- •Лабораторная работа №17
- •Лабораторная работа №18
- •Лабораторная работа №19
- •Работа с данными
- •Состояния и режимы набора данных
- •Поля и класс tField
- •Типы полей и типы данных
- •Сортировка
- •Навигация
- •Фильтрация
- •Редактирование
- •Добавление и удаление
- •Лабораторная работа №20
- •Лабораторная работа №21
- •Лабораторная работа №22
- •Лабораторная работа №23
- •Компонент dbCtrlGrid
- •Лабораторная работа №24
- •Импорт информации из Delphi в Word
- •1. Как определить установлен ли Excel
- •2. Как определить запущен ли Excel
- •3. Как вывести данные в Excel
- •Лабораторная работа №25
- •Поиск и фильтрация данных в Delphi
- •Общие положения
- •Поиск данных
- •Лабораторная работа №26
- •Лабораторная работа №27
- •Отчеты в Delphi
- •Лабораторная работа №28
- •Лабораторная работа №29
- •Лабораторная работа №30
- •Лабораторная работа №31
- •Лабораторная работа №32
- •Стандартные функции php для работы с MySql
- •Пример простейшей поисковой системы на php
- •Сортировка таблиц
- •Лабораторная работа №33
- •Работа с соединениями
- •Постоянные соединения с базами данных
- •Лабораторная работа №34
- •Создание бд и таблиц
- •Создание бд и таблиц с помощью php
- •Создание бд и таблиц с использованием phpMyAdmin
- •Лабораторная работа №35
- •Лабораторная работа №36
- •Применение информации о структуре таблицы
- •Лабораторная работа №37
- •Лабораторная работа №39
- •Роль сервера приложений: Настройка сервера приложений
- •Предварительная подготовка
- •Настройка сервера приложений
- •Параметры сервера приложений
- •Сводка выбранных параметров
- •Завершение работы мастера настройки сервера
- •Удаление роли сервера приложений
- •Дальнейшие действия: выполнение дополнительных задач
- •Подготовка данных для сервера приложений
- •Создание сервера приложений
- •Лабораторная работа №40
- •Создание локального клиентского приложения (на том же пк, что и сервер)
- •Удаленный клиент с использованием olEnterprise
- •Об удаленном клиенте с использованием dcom
- •Удаленный клиент с использованием ActiveForm
Синтаксис
CREATE EXCEPTION name "<message>";
-
Аргумент
Описание
name
Имя, которое ассоциировано с сообщением исключительной ситуации. Должно быть уникальным среди имен исключительных ситуаций в базе данных.
"<message>"
Строка, заключенная в кавычки, содержащая буквенно-цифровые символы и знаки пунктуации. Максимальная длина: 78 символов.
Примеры
Следующая инструкция создает UNKNOWN_EMP_ID исключительную ситуацию:
CREATE EXCEPTION UNKNOWN_EMP_ID "Invalid employee number or project id.";
Следующий фрагмент из сохраненной процедуры поднимает, предварительно установленную исключительную ситуацию, когда SQLCODE принимает значение -530, которое является нарушением ограничения FOREIGN KEY:
...
WHEN SQLCODE -530 DO
EXCEPTION UNKNOWN_EMP_ID;
...
Вызываем Interactive SQL, пятая кнопка справа. Пишем запрос:
CREATE EXCEPTION EX_NOMBER1 “Ошибка”;
commit;
Нажимаем выполнить.
Мы создали исключение EX_NOMBER1, которое выводит некоторое сообщение. Мы можем это исключение в дальнейшем вызвать в триггере. Допустим у нас имеется какое-то условие, и если оно не выполнилось в триггере, то мы вызываем исключение EX_NOMBER1, которое сигнализирует нам об ошибке
При этом запрос выполнится, и окно запросов очиститься.
Создадим еще несколько исключений аналогично:
CREATE EXCEPTION EX_NOMBER2 “Неверно введены данные”;
commit;
CREATE EXCEPTION EX_NOMBER2 “ОК! Все работает правильно”;
commit;
СОДЕРЖАНИЕ И ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Изучить теоретические сведения.
К созданной базе данных в предыдущей лабораторной работе создать индексы и исключения как рассказано выше, следуя все описанным шагам.
Проверить работу всего проекта.
Продемонстрировать преподавателю работу разработанного образца проекта.
Получить от преподавателя индивидуальное задание и создать проект (по аналогии) для выполнения индивидуального задания.
Подготовиться к защите лабораторной работы, которая включает в себя демонстрацию индивидуального варианта, защиту по контрольным вопросам теоретической части работы.
Вопросы выходного контроля:
Расскажите, как установить и настроить Inter Base.
Дайте определение понятию индекс.
Расскажите, как создать индекс и для чего они используются
Напишите синтаксис создания индексов.
Дайте определение понятию исключение
Расскажите, как создать исключение, и для чего они нужны.
Напишите синтаксис создания исключения.
Лабораторная работа №14
Тема: Создание и модификация триггеров в СУБД.
Цель работы: Научится создавать и модифицировать триггеры в СУБД на примере Inter Base.
Время работы: 2 учебных часа.
Правила по ТБ: Общие.
Оборудование рабочего места: Практикум, ПК.
Программное обеспечение: Windows, MS Office, InterBase.
Вопросы входного контроля:
Расскажите, как создать таблицу
Дайте определение понятию триггер.
Дайте определение понятию индекс.
Расскажите, как создать индекс и для чего они используются
Дайте определение понятию исключение
Расскажите, как создать исключение, и для чего они нужны.
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Создание генераторов
В Interbase нет такого типа как счетчик или autoincrement, выход из этой ситуации обеспечивается созданием, так называемого генератора!
Генератор – это хранящаяся в базе данных программа, выдающая при каждом обращении к ней уникальное число. Для каждого автоинкрементного поля в базе данных создается свой генератор.
Вызываем Interactive SQL, пятая кнопка справа. Пишем запрос:
CREATE GENERATOR GEN_CAR;
Нажимаем выполнить.
Мы создали генератор GEN_CAR. Теперь нам надо установить начальное значение генератора, делается это следующим образом:
SET GENERATOR GEN_CAR TO 0;
Нажимаем выполнить.
При этом запрос выполнится, и окно запросов очиститься.
Остальные генераторы создаются аналогично:
CREATE GENERATOR GEN_CLIENT;
commit;
SET GENERATOR GEN_CLIENT TO 0;
commit;
CREATE GENERATOR GEN_GRAFWORK;
commit;
SET GENERATOR GEN_GRAFWORK TO 0;
commit;
CREATE GENERATOR GEN_OPERATION;
commit;
SET GENERATOR GEN_OPERATION TO 0;
commit;
CREATE GENERATOR GEN_PERSONAL;
commit;
SET GENERATOR GEN_PERSONAL TO 0;
commit;
CREATE GENERATOR GEN_SERVICE;
commit;
SET GENERATOR GEN_SERVICE TO 0;
commit;
CREATE GENERATOR GEN_TSERVICE;
commit;
SET GENERATOR GEN_TSERVICE TO 0;
commit;
Теперь жмите CTRL+E, у Вас должно получится вот так (рисунок 14.1):
Рисунок 14.1 – Созданные генераторы
Создание триггеров
У нас есть генераторы, с заданным начальным значением. Осталось только привязать каждый генератор к конкретной таблице и конкретному полю.
Пишем запрос:
SET TERM !!;
CREATE TRIGGER "BEF_INS_CAR" FOR "CAR"
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.CARID = GEN_ID(GEN_CAR,1);
END!!
SET TERM ;!!
commit;
Выполняем запрос! Опаньки, наш генератор теперь введен в работу :)
Конструкция SET TERM задает новый разделитель операторов. Если ее не использовать, то получится, что у Вас и после NEW.CARID = GEN_ID(GEN_CAR,1); стоит точка с запятой и после END тоже стоит точка запятой, а Interbase это не нравится, почему я так и не понял, но она без конструкции SET TERM отказывается создавать триггер.
Также хочу обратить твое внимание на то, что в строках:
SET TERM !!;
SET TERM ;!!
после TERM необходимо поставить пробел, а между «!!» и «;» ставить пробел необязательно! С этой проблемой я столкнулся при переходе на версию 7.5, в IB6 скрипты работали без разделения пробелом «TERM» и «!!;».
Рассмотрим поподробней, что же мы накодили:
CREATE TRIGGER – говорит, что мы хотим создать триггер (правило), далее указываем название триггера и для какой таблицы он будет предназначен (FOR "CAR"). Предложение ACTIVE BEFORE INSERT – указывает, когда триггер должен выполняться, в данном случае, каждый раз перед созданием новой записи. Слово AS – зарезервированное, открывает тело триггера. Тело триггера всегда (даже если триггер содержит единственный оператор – как в нашем случае) должно ограничиваться парой ключевых слов BEGIN – END. В шестой строке расположен оператор, в котором новому значению (слово NEW) поля CARID присваивается значение, полученное от встроенной функции GEN_ID. Двумя параметрами обращения к этой функции указывается имя генератора и то значение, на которое должно увеличиться текущее значение генератора («шаг» генератора).
Создаем остальные триггеры:
SET TERM !!;
CREATE TRIGGER "BEF_INS_CLIENT" FOR "CLIENT"
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.CLIENTID = GEN_ID(GEN_CLIENT,1);
END!!
SET TERM ;!!
commit;
SET TERM !!;
CREATE TRIGGER "BEF_INS_GRAFWORK" FOR "GRAFWORK"
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.WORKID = GEN_ID(GEN_GRAFWORK,1);
NEW.DATA = 'TODAY';
END!!
SET TERM ;!!
commit;
SET TERM !!;
CREATE TRIGGER "BEF_INS_OPERATION" FOR "OPERATION"
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.OPERID = GEN_ID(GEN_OPERATION,1);
NEW.DATA = 'TODAY';
END!!
SET TERM ;!!
commit;
SET TERM !!;
CREATE TRIGGER "BEF_INS_PERSONAL" FOR "PERSONAL"
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.PERSONALID = GEN_ID(GEN_PERSONAL,1);
END!!
SET TERM ;!!
commit;
SET TERM !!;
CREATE TRIGGER "BEF_INS_SERVICE" FOR "SERVICE"
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.SERVICEID = GEN_ID(GEN_SERVICE,1);
END!!
SET TERM ;!!
commit;
SET TERM !!;
CREATE TRIGGER "BEF_INS_TSERVICE" FOR "TSERVICE"
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.TSERVICEID = GEN_ID(GEN_TSERVICE,1);
END!!
SET TERM ;!!
commit;
Выполнем запрос. Теперь все генераторы связаны со своими таблицами.
В теории баз данных есть такая фишка: каскадное удаление данных, то есть при удалении строки из родительской таблицы происходит автоматическое удаление данных из дочерних таблиц. В нашем случае, например, Вам захочется удалить какого-нибудь сотрудника из таблицы «PERSONAL», но в «GRAFWORK» есть информация о графике работы этого сотрудника и в «OPERATION» находятся все операции совершенные им. То есть если сотрудник исчезнет, в связанных таблицах данные «повиснут», и Ваша база будет засорена.
Можно написать триггер, в котором описать все необходимые действия для организации каскадного удаления. Заходим в Interactive SQL и пишем:
SET TERM !!;
CREATE TRIGGER "BEF_DEL_PERSONAL" FOR "PERSONAL"
ACTIVE BEFORE DELETE
AS
BEGIN
DELETE FROM "GRAFWORK"
WHERE GRAFWORK.PERSONALKOD=PERSONAL.PERSONALID;
DELETE FROM "OPERATION"
WHERE OPERATION.PERSONALKOD=PERSONAL.PERSONALID;
END!!
SET TERM ;!!
commit;
Жмите CTRL+E, получите триггер.
Мы создали триггер "BEF_DEL_PERSONAL" для таблицы "PERSONAL", который будет срабатывать перед удаление строки (ACTIVE BEFORE DELETE), выполняя удаление из таблицы «GRAFWORK» и «OPERATION» (DELETE FROM ...).
Теперь сделайте еще два триггера с помощью скрипта:
SET TERM !!;
CREATE TRIGGER "BEF_DEL_OPERATION" FOR "OPERATION"
ACTIVE BEFORE DELETE
AS
BEGIN
DELETE FROM "TSERVICE"
WHERE TSERVICE.OPERKOD=OPERATION.OPERID;
END!!
SET TERM ;!!
commit;
SET TERM !!;
CREATE TRIGGER "BEF_DEL_CLIENT" FOR "CLIENT"
ACTIVE BEFORE DELETE
AS
BEGIN
DELETE FROM "CAR" WHERE CAR.CLIENTKOD=CLIENT.CLIENTID;
DELETE FROM "OPERATION"
WHERE OPERATION.CLIENTKOD=CLIENT.CLIENTID;
END!!
SET TERM ;!!
commit;
Выполните скрип, у Вас получатся вот такие триггеры (рисунок 14.2):
Рисунок 14.2 – Созданные триггеры
Использование базы данных
Чтобы от нашей базы была хоть какая-то польза необходимо внести в нее информацию.
Можно, конечно, это сделать с помощью интерфейса IBConsole, но я опять-таки рекомендую использовать Interactive SQL. Используйте конструкцию INSERT. Можешь вносить свои данные и изменять старые. Удалять строки из таблиц, проверяя, как действует каскадное удаление.
СОДЕРЖАНИЕ И ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Изучить теоретические сведения.
К созданной базе данных в предыдущей лабораторной работе создать триггеры как рассказано выше, следуя все описанным шагам.
Проверить работу всего проекта.
Продемонстрировать преподавателю работу разработанного образца проекта.
Получить от преподавателя индивидуальное задание и создать проект (по аналогии) для выполнения индивидуального задания.
Подготовиться к защите лабораторной работы, которая включает в себя демонстрацию индивидуального варианта, защиту по контрольным вопросам теоретической части работы.
Вопросы выходного контроля:
Дайте определение понятию индекс.
Напишите синтаксис создания индексов.
Дайте определение понятию исключение
Напишите синтаксис создания исключения.
Дайте определение понятию триггер.
Расскажите, для чего используются триггеры.
Напишите синтаксис создания триггера.