Лабораторные работы (А-13-07) / Корольков / Отчет лаб№9
.docxМосковский Энергетический Институт
Технический Университет
Лабораторная работа по курсу БД.
№ 9
Страна: Россия
Выполнил студент группы
А-13-07
Корольков Алексей
3 декабря
Проверила: Сидорова Наталья Петровна
2010
Задание:
-
Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД;
-
Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.
select poss.gp as gp into gpr from poss
select poss.gok as gok into gokt from poss
select kat_obuch.cod as kat into codkat from kat_obuch
select family.cod as sem_polog into codsem from family
select * into vuz_gorod1 from vuz_gorod
select * into vuz1 from vuz
create trigger zadan_1 on poss2
for insert as
if (select count(*) from gpr, inserted
where gpr.gp=inserted.gp) = 0
select 'значение поля gp не принадлежит домену'
if (select count(*) from gokt, inserted
where gokt.gok=inserted.gok) = 0
select 'значение поля gok не принадлежит домену'
if (select count(*) from codkat, inserted
where codkat.kat=inserted.kat_obuch_k) = 0
select 'значение поля kat_obuch не принадлежит домену'
if (select count(*) from codsem, inserted
where codsem.sem_polog=inserted.sem_polog_k) = 0
select 'значение поля sem_polog не принадлежит домену'
drop trigger zadan2_1
create trigger zadan2_1 on vuz_gorod1
for insert as
if @@rowcount = 0
return
insert into vuz1 select cod_vuza, nazvanie_vuza
from inserted as i_1
where cod_vuza not in (select cod from vuz1)
if @@error != 0
begin
raiserror('Insert error!', 16,1)
rollback tran
return
end
return
create trigger zadan2_2 on vuz_gorod1
for update as
if @@rowcount = 0
begin
update v
set v.cod = i_1.cod_vuza, v.uch_zavedenie = i_1.nazvanie_vuza
from deleted d, vuz1 v, inserted i_1
where ((d.cod_vuza = v.cod)
or (d.nazvanie_vuza = v.uch_zavedenie))
end
if @@error != 0
begin
raiserror('Update error!', 16,1)
rollback tran
return
end
return
create trigger zadan2_3 on vuz_gorod1
for delete as
if @@rowcount = 0
return
delete vuz1
from deleted d, vuz1 v
where d.cod_vuza = v.cod
if @@error != 0
begin
raiserror('Delete error!', 16,1)
rollback tran
return
end
return
insert poss2 values
(265579,'ТРОЙНОВ СТЕПАН ГРИГОРЬЕВИЧ ','240270','М',
'5','001702','05',0419569,'09','89','03','93')
go
insert vuz_gorod1 values
(0172341,'МЭИ ','123','НЕВИННОМЫССК ','01',
'РОССИЯ ')
delete from vuz_gorod1 where cod_vuza = 0172341
select * from vuz_gorod1
create trigger [dbo].[zadan2] on [dbo].[family]
for delete as
if @@rowcount = 0
return
update poss2 set sem_polog_k = Null
from deleted d, poss2 f
where d.cod = f.sem_polog_k
if @@error != 0
begin
raiserror('Delete error!', 16,1)
rollback tran
return
end
return