Лабораторные работы (А-13-07) / Дудкина, Захаров / Отчет по лабораторной работе №9
.docxМосковский Энергетический Институт, Технический Университет
ЛАБОРАТОРНАЯ РАБОТА №9
Студенты: Дудкина А., Захаров Д.
Группа: А-13-07
Вариант: 1
Преподаватель: Сидорова Н.П.
2010г.
Задания
Задание 1
Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД.
create table cir9
(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 = 1
while (@i < 99)
begin
insert into codgp values(@i)
set @i = @i + 1
end
create trigger main_trig on azer1
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_vuza from inserted
select @c= nazvanie_vuza from inserted
insert into vuz(cod, uch_zavedenie)values (@r,@c)
insert vuz_gorod values
(1234567,'ПРОСТО ВУЗ','111','КОРОЛЕВ','10',
'КЫРГЫЗСТАН')
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
delete from vuz_gorod where cod_vuza=1234567
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
insert vuz_gorod values
(1234567,'ПРОСТО ВУЗ','111','КОРОЛЕВ','10',
'КЫРГЫЗСТАН')
update vuz_gorod set nazvanie_vuza='ЕЩЕ ПРОСТО ВУЗ', cod_vuza=7654321 where cod_vuza=1234567
create trigger update_trig3 on family
for update as
declare @in_cod CHAR(1), @in_status CHAR(12),
@old_cod CHAR(1), @old_status CHAR(12)
SET @in_cod = (select cod from inserted)
SET @in_status = (select family_status from inserted)
SET @old_cod = (select cod from deleted)
SET @old_status = (select family_status from deleted)
update cir_kach
SET
cir_kach.sem_polog_k = @in_cod,
where
cir_kach.sem_polog_k = @old_cod
insert family values
('5','НЕ-ПОЙМИ-КТО')
update family
set
cod = '4',
family_status = 'АБЫР'
where
family.cod = '5'
Задание 3.
Триггер для update:
create trigger vuz_gorod_update on vuz_gorod
for update as
declare @cod_ins VARCHAR(50), @uch_zav_ins VARCHAR(50),
@cod_del VARCHAR(50), @uch_zav_del VARCHAR(50)
SET @cod_ins = (select cod_vuza from inserted)
SET @uch_zav_ins = (select nazvanie_vuza from inserted)
SET @cod_del = (select cod_vuza from deleted)
SET @uch_zav_del = (select nazvanie_vuza from deleted)
update vuz
SET
vuz.cod = @cod_ins,
vuz.uch_zavedenie = @uch_zav_ins
where
vuz.cod = @cod_del and vuz.uch_zavedenie = @uch_zav_del
update vuz_gorod
set
cod_vuza = 12910511,
nazvanie_vuza = 'changed'
where
vuz_gorod.cod_vuza = 129105