Лабораторные работы (А-13-07) / Катков, Моисеев / лаба9бд
.doc
Лабораторная работа №9
по курсу «Базы данных и экспертные системы»
Группа: А-13-07
Преподаватель: Сидорова Н. П.
Выполнили: Катков А.С., Моисеев Н.А.
Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД;
select kaza.gp as gp into gpr from kaza
select kaza.gok as gok into gokt from kaza
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 kaza3
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 не принадлежит домену'
Примеры ввода:
insert kaza3 values
(265579,' ПУПКИН СТЕПАН ГРИГОРЬЕВИЧ ','240270','М',
'5','001702','05',0419569,'09','89','03','93')
go
Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.
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 vuz_gorod1 values
(0172341,'МЭИ ','123',' НЕВИННОМЫССК ','01',
'РОСИИЯ ')
delete from vuz_gorod1 where cod_vuza = 0172341
select * from vuz_gorod1
Триггер, который при изменении поля cod в таблице gorod, меняет поле cod_goroda в таблице vuz_gorod1
create trigger zadan3 on gorod
for update as
update g
set g.cod_goroda = i_1.cod
from deleted d, vuz_gorod1 g, inserted i_1
where (d.cod = g.cod_goroda)
if @@error != 0
begin
raiserror('Update error!', 16,1)
rollback tran
return
end
return
Примеры ввода:
update gorod set cod='999'
where nazvanie_goroda='МОСКВА'
select * from vuz_gorod1