Лабораторные работы (А-13-07) / Алехин, Макашова / Макашова_Алехин_Лабораторная_работа_9
.docЛабораторная работа 9
Вариант № 1
Выполнили студенты группы А-13-07
Макашова Мария
Алехин Роман
Задание:
-
Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД;
create table uzb0
(nomer integer,
fio char (40),
d_rogd char(2),
m_rogd char(2),
g_rogd char(2),
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 check_kat_obuch (cod_k_o char(2))
insert check_kat_obuch values ('00')
insert check_kat_obuch values ('01')
insert check_kat_obuch values ('02')
insert check_kat_obuch values ('03')
insert check_kat_obuch values ('04')
insert check_kat_obuch values ('05')
insert check_kat_obuch values ('06')
insert check_kat_obuch values ('07')
insert check_kat_obuch values ('08')
insert check_kat_obuch values ('09')
insert check_kat_obuch values ('10')
insert check_kat_obuch values ('11')
insert check_kat_obuch values ('12')
insert check_kat_obuch values ('13')
insert check_kat_obuch values ('14')
insert check_kat_obuch values ('15')
insert check_kat_obuch values ('16')
create trigger kat_obuch_0 on uzb0
for insert as
if (select count(*) from check_kat_obuch, inserted
where check_kat_obuch. cod_k_o=inserted.kat_obuch_k)=0
select 'значение поля kat_obuch_k не принадлежит домену'
insert into uzb0 (fio,kat_obuch_k)
values ('Иванов Иван Иванович', '18')
insert into uzb0 (fio,kat_obuch_k)
values ('Иванов Иван Иванович', '11')
-
Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.
INSERT
CREATE TRIGGER insTrigger ON vuz_gorod
FOR INSERT AS
BEGIN
INSERT INTO vuz (cod,uch_zavedenie)
SELECT
cod_vuza
,nazvanie_vuza
FROM inserted
END
insert
into vuz_gorod
(cod_vuza, nazvanie_vuza, cod_goroda, nazvanie_goroda, nazvanie_stran)
values
(1, 'tempVUZ', 101, 'tempGOROD', 'tempSTRAN')
select *
from vuz_gorod
where cod_vuza = 1
select *
from vuz
where cod = 1
DELETE
CREATE TRIGGER delTrigger ON vuz_gorod
FOR DELETE AS
BEGIN
DELETE vuz
FROM deleted,vuz
WHERE
vuz.cod=deleted.cod_vuza
END
delete
from vuz_gorod
where cod_vuza = 1
select *
from vuz_gorod
where cod_vuza = 1
select *
from vuz
where cod = 1
UPDATE
CREATE TRIGGER updTrigger ON vuz_gorod
for update as
begin
update vuz
set vuz.cod = inserted.cod_vuza, vuz.uch_zavedenie = inserted.nazvanie_vuza
from deleted, vuz, inserted
where ((deleted.cod_vuza = vuz.cod)
or (deleted.nazvanie_vuza = vuz.uch_zavedenie))
end
update vuz_gorod
set nazvanie_vuza = 'newVUZ'
from vuz_gorod
where cod_vuza = 1
select *
from vuz_gorod
where cod_vuza = 1
select *
from vuz
where cod = 1
Свой триггер
CREATE TRIGGER updGorodTrigger ON vuz_gorod
for update as
begin
update gorod
set gorod.cod = inserted.cod_goroda, gorod.nazvanie_goroda = inserted.nazvanie_goroda
from deleted, vuz, inserted
where ((deleted.cod_goroda = gorod.cod)
or (deleted.nazvanie_goroda = gorod.nazvanie_goroda))
end
update vuz_gorod
set nazvanie_stran = 'newSTRAN'
from vuz_gorod
where cod_vuza = 1
select *
from vuz_gorod
where cod_vuza = 1
select *
from vuz
where cod = 1