Лабораторные работы (А-13-07) / Ковех,Рязанов / лаб9
.docМосковский Энергетический Институт
Технический Университет
Лабораторная работа по БД
№ 9
Ковех Ольга
Рязанов Михаил
2010
Задание 1.
Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД;
alter trigger Lab9_1 on arm
for insert as
if (select count(*) from codsem, inserted
where codsem.sem_polog=inserted.sem_polog_k) = 0
select 'значение поля sem_polog не принадлежит заданному диапазону‘
Задание 2.
Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.
1)Добавление
create trigger zadan2_1 on vuz_gorod
for insert as
insert into vuz
select cod_vuza, nazvanie_vuza
from inserted
Пример:
insert into vuz_gorod values (2070903,'PTU','000','ЕРЕВАН','02','УКРАИНА')
2) Удаление
alter trigger zadan2_2 on vuz_gorod
for delete as
begin
delete vuz
from deleted,vuz
where
vuz.cod=deleted.cod_vuza
end
Пример:
delete from vuz_gorod where cod_vuza=2070903
select *
from vuz
where cod = 2070903
3)Обновление
alter trigger zadan2_3 on vuz_gorod
for update as
update vuz
set vuz.cod = inserted.cod_vuza,
vuz.uch_zavedenie = inserted.nazvanie_vuza
from deleted ,vuz, inserted
where
((deleted.cod_vuza = vuz.cod)or (deleted.nazvanie_vuza = vuz.uch_zavedenie))
Пример:
UPDATE vuz_gorod SET nazvanie_vuza='PTU' WHERE cod_vuza=129000
Задание 3
CREATE TRIGGER vuz_gorod_cascade_deleted ON kat_obuch
FOR DELETE AS
BEGIN
UPDATE arm
set arm.kat_obuch_k = NULL
FROM deleted,arm
WHERE
deleted.cod = arm.kat_obuch_k
END
ПРОВЕРКА
DELETE FROM KAT_OBUCH WHERE KAT_OBUCK.COD=’03’