Скачиваний:
35
Добавлен:
28.06.2014
Размер:
42.5 Кб
Скачать

Лабораторная работа №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

Соседние файлы в папке Катков, Моисеев