Лабораторные работы (А-13-07) / Крамм, Кохов / лаб 9
.docx
Отчет
К лабораторной работе №9
По базам данных
Выполнили:
Кохов В.В.
Крамм Е.М.
Группа: А-13-07
Преподаватель:
Сидорова Н.П.
-
Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД.
create table azer1
(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))
insert codgp values ('0')
insert codgp values('1')
insert codgp values('2')
insert codgp values('3')
……………………………………………………………
insert codgp values('50')
create table codgok (gokkod char(2))
insert codgok values ('0')
insert codgok values('1')
insert codgok values('2')
insert codgok values('3')
………………………………………………………………
insert codgok values('50')
create table codkat_obuch (katkod char(2))
insert codkat_obuch values('01')
insert codkat_obuch values('02')
insert codkat_obuch values('03')
…………………………………………………………………………………
insert codkat_obuch values('17')
create table codsem_pol (semkod char(2))
insert codsem_pol values('0')
insert codsem_pol values('1')
insert codsem_pol values('2')
insert codsem_pol values('3')
create trigger main_trig on azer1
for insert as
if (select count(*) from codgp, inserted
where codgp.gpkod=inserted.gp)=0
select 'значение поля gp не принадлежит допустимым значениям'
if (select count(*) from codgok, inserted
where codgok.gokkod=inserted.gok)=0
select 'значение поля gok не принадлежит допустимым значениям'
if (select count(*) from codkat_obuch, inserted
where codkat_obuch.katkod=inserted.kat_obuch_k)=0
select 'значение поля kat_obuch_k не принадлежит допустимым значениям'
if (select count(*) from codsem_pol, inserted
where codsem_pol.semkod=inserted.sem_polog_k)=0
select 'значение поля sem_polog_k не принадлежит допустимым значениям'
insert azer1 values
(108002,'ЖУЧКИНА СТЕЛЛА ВСЕВОЛОДОВНА ','210466','Ж',
'6','000403','03',2045656,'00','45','07','93')
go
-
Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.
create trigger intrig
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
(2222222,'КИРОВОГР.ИНСТ.С/Х МАШ. ','111','КИРОВГРАД ','02',
'УКРАИНА ')
create trigger deltrig
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=2222222
craete trigger uptrig
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
update vuz_gorod set nazvanie_vuza='ААААА.АА ',
cod_vuza=2222222 where cod_vuza=333333
create trigger check_nomer
on azer1
for insert as
if(select count(*) from azer1, inserted
where azer1.nomer=inserted.nomer)>1
begin
rollback
print 'Уже есть запись с таким номером'
end;
insert azer values
(108002,'ЖУЧКИНА СТЕЛЛА ВСЕВОЛОДОВНА ','210466','Ж',
'0','000403','03',2045656,'00','87','07','93')