Лабораторные работы (А-13-07) / Беляков / lab9
.doc
Отчёт к лабораторной работе №9
по Базам Данных
Выполнил студент группы
А-13-07
Беляков Р.Д.
Задание 1.
Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД;
create trigger t1 on poss
for insert as
if (select count(*) from cgp, inserted
where cgp.vgp=inserted.gp)=0
select ' ошибка в поле gp '
if (select count(*) from cgok, inserted
where cgok.vgok=inserted.gok)=0
select ' ошибка в поле gok '
if (select count(*) from cpol, inserted
where cpol.vpol=inserted.sem_polog_k)=0
select ' ошибка в полеsem_polog_k '
if (select count(*) from cko, inserted
where cko.vko=inserted.kat_obuch_k)=0
select ' ошибка в поле kat_obuch_k '
Задание 2.
Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.
create trigger ti
on vuz_gorod
for insert as
if @@rowcount = 1
update vuz
set cod = cod + cod_vuza
from inserted
where vuz.cod = inserted.cod_vuza
else
update vuz
set cod =
cod + (select sum(cod_vuza)
from inserted
group by inserted.cod_vuza
having vuz.cod = inserted.cod_vuza)
create trigger id
on vuz_gorod
for delete
as
if @@rowcount = 1
update vuz
set cod = cod - cod_vuza
from deleted
where vuz.cod = deleted.cod_vuza
else
update vuz
set cod = cod - (select sum(cod_vuza)
from deleted
group by deleted.cod_vuza
having vuz.cod = deleted.cod_vuza)
create trigger tu
on vuz_gorod
for update
as
if update (cod_vuza)
begin
if @@rowcount = 1
update vuz
set cod = cod + inserted.cod_vuza - deleted.cod_vuza
from inserted, deleted
where vuz.cod = inserted.cod_vuza
and inserted.cod_vuza = deleted.cod_vuza
else
begin
update vuz
set cod = cod +
(select sum(cod_vuza)
from inserted
group by inserted.cod_vuza
having vuz.cod =
inserted.cod_vuza)
update vuz
set cod = cod -
(select sum(cod_vuza)
from deleted
group by deleted.cod_vuza
having vuz.cod =
deleted.cod_vuza)
end
end
Задание 3.
create trigger tr
on poss
for insert as
if (select count(*)
from poss, inserted
where poss.spec = inserted.spec) = 0
begin
rollback transaction
select "Отсутствует специальность"
end
else
select "Добавлено"