Задание: подключить базу данных Dekanat.gdb на сервере FireBird в локальном режиме и организовать контроль вводимых данных при помощи следующих объектов:
Ход работы:
1. папку PR_1(для сохранения всех файлов работы) разместите На Рабочем столе, скопировав ее с личного диска.
2. Подключите и откройте базу данных через IB Expert
3. Создайте новое исключение:
§ имя – Er_nom1,
§ текст – «Значение числа должно быть положительным»,
§ Описание – «Проверка на положительность»
4. Просмотрите текст SQL для создания исключения (вкладка DDL) и сохраните его описание в файл Список исключений.txt ( через буфер обмена )
5. Создайте новый триггер:
§ имя – Tr_add_student
§ Таблица – Db_ student
§ Тип - перед вставкой
§ Режим - Активная
§ текст – IF new.tab<0 then exception Er_nom1
6. Просмотрите текст SQL для создания триггера и сохраните его описание (, Preview, ) в файл Список триггеров.rtf С русским заголовком Интерактивно добавить нового студента с табельным номером -8 и остальными правильными данными. Сохраните данные. Определите, в какой момент срабатывает триггер и вызывается исключение? Исправьте номер на 0. Какое появилось сообщение? Исправьте номер на правильный (108). Сохраните транзакцию. Измените значение номера у другой существующей записи на -8. Почему не срабатывает триггер? Отмените транзакцию
7. Самостоятельно создайте следующие исключения для дальнейшего использования и сохраните их описание в конец файла Список исключений.txt: | Имя | Текст | Описание |
Er_nom2 | Значение кода обязательное | Проверка на пустоту | |
Er_str1 | Не введен описательный текст | Проверка на пустоту |
8. Самостоятельно измените текст тела триггера Tr_add_student, добавив проверку Номера, Фамилии и Даты на пустоту (is null). Для каждой проверки активизируйте нужное исключение и сохраните описание в конец файла Список триггеров.rtf
9. Создайте новую хранимую процедуру:
Имя | Тип | Описание | |
Первый | New_nom | Smallint | Значение кода группы |
Второй | New_name | Char(50) | Значение название группы |
§ имя – SP_ins_gruop
§ Входные параметры: см. таблицу
(!!! ВАЖЕН порядок переменных):
§ Комментарии – хранимая процедура для добавления новой группы
§ Тело процедуры: insert into Группа (номер, называние) values (: New_nom,: new_name)
§ Выполнить компиляцию. Просмотрите текст SQL-команды создания процедуры и сохраните ее описание (, Preview, ) в файл Список процедур.rtf с русским заголовком
10. Протестируйте созданную процедуру (F9 - execute procedure), введя значение 10, В-31
11. Запустите хранимую процедуру через SQL:
§ Создайте SQL-команду: execute procedure sp_ins_group (11,'В-21')
§ Запустите на выполнение, если ошибок нет, то подтвердите транзакцию
§ Просмотрите содержимое таблицы Группа.
12. Создайте новый генератор с начальным значением
§ имя – Gen_Nom_Group
§ Начальное значение – 100
§ Описание – счетчик для кодов групп
§ Просмотрите текст SQL для создания исключения (вкладка DDL) и сохраните его описание в файл Список генераторов.txt ( через буфер обмена)
13. Внесите изменения в хранимую процедуру sp_ins_group:
§ Удалите первый входной параметр
§ Измените тело процедуры:
insert into Группа (номер, называние) values (gen_id (Gen_Nom_Group, 1),: new_name)
§ в файл Список процедур.rtf сохраните измененную процедуру
14. Протестируйте и сохраните изменения
15. Запустите процедуру через SQL с названием ‘В-32’, а затем ‘В-22’. Если ошибок нет, то просмотрите данные в таблице Группа. Какие номера имеют новые предметы?
16. Самостоятельно создайте генератор для номера (Gen_Nom_Pred), процедуру (sp_ins_pred) для добавления новой записи о предмете (запрос на название предмета и количество часов) и триггер (Tr_add_pred) с проверкой введенного названия на пустоту, а количества часов на диапазон от 20 до 300 часов. Описание объектов сохранить в конец соответствующих файлов
17. Отсоедините БД. Завершите работу с программой. Скопируйте папку PR_1 на личный диск.
Дополнительное задание:
§ В процедуру sp_ins_group добавить входной параметр для ФИО классного руководителя (New_FIO)
§ Создайте процедуру для проверки ссылочной целостности между Группами и Студентами, то есть проверки существует ли значение в поле Код группы из Таблицы Группа в поле Код группы из Таблицы Студент. Если такие данные найдены, то активизируйте сообщение об ошибке «Нельзя удалять эту группу, потому что в ней существуют студенты!». Подключите эту процедуру на удаление данных таблицы Группа
Контрольные вопросы:
1. Назначение, структура и порядок использования триггера, исключения, хранимой процедуры и генератора
2. Создание триггера, исключения, хранимые процедуры и генераторы
3. Подключать хранимые процедуры
4. Активизировать триггеры и исключения
5. Увеличивать и использовать генератор
6. Использовать команды SQL: Create Exception, Create Trigger, Create Procedure, Execute Procedure,
Create Generator, Set Generator, Gen_id,
Индивидуальное задание: Для базы данных создать объекты контроля данных:
§ Триггер проверки при добавлении и редактировании данных в справочной таблице
§ Триггер проверки удаления записи в справочной таблицы, чтобы не было связанных с ней записей в подчиненных таблицах
§ Хранимую процедуру для добавления новой записи в основную таблицу и расчетом вычисляемого поля
§ Хранимую процедуру для редактирования существующей записи в основной таблице и пересчетом вычисляемого поля
§ Хранимую процедуру для удаления существующей записи из основной таблицы
Примечание: для вывода сообщений создать Исключения, при добавлении новой записи код создавать при помощи Генератора
Оформить отчет по индивидуальному заданию:
1. Тема индивидуального задания
2. Имя файла базы данных
3. Связи таблиц базы данных
4. Исходные данные
5. Структура триггеров, генераторов, исключений и хранимых процедур с комментариями
6. Результат выполнения триггеров и хранимых процедур
7. Данные после выполненного триггеров и хранимых процедур
Отчет сохранить в файл z:\...\РиЭУБД\Отчеты\3_контроль данных.doc
и распечатать на А4