Лабораторные работы (2011) / Афанасьев / Лабораторная работа 9
.docxМосковский Энергетический Институт, Технический Университет
ЛАБОРАТОРНАЯ РАБОТА №9
Афанасьев Сергей.
А-13-08
Вариант: 4
Задания
Задание 1
Создать триггер на проверку правильности ввода значений в поле «Год приема» (значения от ‘00’ до ‘99’) вашей информационной таблицы; значения этого поля должно быть задано в отдельной таблице вашей БД.
create table uzb3
(nomer integer,
fio char (40) not null,
data_rogden char (6),
pol char (1),
sem_polog_k char (1),
spec char (6),
kat_obuch_k char (2),
vuz_k integer,
mp char (2),
gp char (2),
mo char (2),
gok char (2))
create table codgp (gpkod char(2))
declare @i integer
set @i = 0
while (@i < 99)
begin
insert into codgp values(@i)
set @i = @i + 1
end
create trigger main_trig on uzb3
for insert as
if (select count(*) from codgp, inserted
where codgp.gpkod=inserted.gp)=0
select ‘Недопустимое значение поля gp’
Задание 2.
Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.
create trigger insert_trig on vuz_gorod
for insert as
declare @r int, @c char(25)
select @r= cod from inserted
select @c= uch_zavedenie from inserted
insert into vuz(cod_vuza, nazvanie_vuza) values (@r,@c)
create trigger delete_trig
on vuz_gorod
for delete as
declare @r int, @c char(25)
select @r= cod_vuza from deleted
select @c= nazvanie_vuza from deleted
delete from vuz where cod=@r and uch_zavedenie=@c
create trigger update_trig
on vuz_gorod
for update as
declare @r int, @c char(25)
declare @r_n int, @c_n char(25)
select @r= cod_vuza from deleted
select @c= nazvanie_vuza from deleted
select @r_n= cod_vuza from inserted
select @c_n= nazvanie_vuza from inserted
update vuz set cod=@r_n, uch_zavedenie= @c_n
where vuz.cod=@r and vuz.uch_zavedenie=@c
Свой триггер
create trigger insert_trig2 on vuz_gorod
for insert as
declare @g char(25), @a int;
select @g = nazvanie_goroda from inserted;
select @a = count(*) from gorod where (nazvanie_goroda = @g);
if (@a = 0)
insert into gorod(nazvanie_goroda) values (@g)
insert vuz_gorod(cod_vuza, nazvanie_vuza, nazvanie_goroda) values (1020, 'Инст1', 'МСК')