Лабораторные работы (2011) / Ганишев / Лабораторная работа 9
.docxМОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
Лабораторная работа №9
по дисциплине
«Базы данных и экспертные системы»
подготовил:
студент группы А-13-08
Ганишев В.
проверил:
Сидорова Н.П.
Цель:
-
Практически освоить создание и использование элементарных триггеров.
-
Научиться использовать предопределенные таблицы в теле триггеров.
Задание:
Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД;
Создаём таблицу, содержащую допустимые коды семейного положения:
create table codsem (sempol char(1))
insert codsem values (0)
insert codsem values (1)
insert codsem values (2)
insert codsem values (3)
Триггер, проверяющий корректность кода семейного положения:
create trigger sempol_check on bel
for insert, update as
if (select count(*) from codsem, inserted
where (inserted.sem_polog_k = codsem.sempol)) = 0
select 'Добавленная/Изменённая запись содержит ошибку. Код семейного положения изменяется в диапазоне от 0 до 3'
insert bel (nomer, fio, sem_polog_k) values (523454, 'Симонов Серафим Георгиевич', '5')
Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.
-
create trigger vg_insert_check on vuz_gorod
for insert as
begin
insert vuz (cod,uch_zavedenie)
select cod_vuza, nazvanie_vuza from inserted
end
-
create trigger vg_delete_check on vuz_gorod
for delete as
begin
delete vuz
from vuz, deleted
where deleted.cod_vuza = vuz.cod
end
create trigger vg_update_check on vuz_gorod
for update as
if UPDATE(cod_vuza)
begin
update vuz
set cod = inserted.cod_vuza
from inserted,deleted,vuz
where cod=deleted.cod_vuza
end
if UPDATE(nazvanie_vuza)
begin
update vuz
set uch_zavedenie = inserted.nazvanie_vuza
from inserted,deleted,vuz
where cod=deleted.cod_vuza
end
update vuz_gorod set cod_vuza = 1 where cod_vuza = 128955