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

Лабораторная работа №9

Студенты:

Михайлова В.А.

Панков Д.Е.

Группа: А-13-07

Преподаватель: Сидорова Н.П.

1. Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД;

create trigger proverka1 on poss2

for insert as

declare @gp char(2)

declare @gok char(2)

declare curs cursor for

select gp,gok from inserted

open curs

fetch curs into @gp,@gok

if (not (@gp between '00'and '99'))

select 'Значение поля "Год приема" неверно'

if (not (@gok between '00'and '99'))

select 'Значение поля "Год окончания" неверно'

if (select count(*) from family,inserted

where family.cod=inserted.sem_polog_k)=0

select 'Значение поля "Семейное положение" неверно'

if (select count(*) from kat_obuch,inserted

where kat_obuch.cod=inserted.kat_obuch_k)=0

select 'Значение поля "Категория обучения" неверно'

close curs

deallocate curs

Пример корректного ввода

insert poss2 values

(534421,'Козырев Юрий Иванович ','18','12','71','M',

'0','001702','05',0419569,'09','89','03','93')

Примеры некорректных вводов

insert poss2 values

(534421,'Козырев Юрий Иванович ','18','12','71','M',

'0','001702','05',0419569,'09','--','03','93')

Значение поля Год приема неверно

insert poss2 values

(534421,'Козырев Юрий Иванович ','18','12','71','M',

'0','001702','05',0419569,'09','89','03','%4')

Значение поля Год окончания неверно

insert poss2 values

(534421,'Козырев Юрий Иванович ','18','12','71','M',

'9','001702','05',0419569,'09','89','03','%4')

Значение поля Семейное положение неверно

insert poss2 values

(534421,'Козырев Юрий Иванович ','18','12','71','M',

'9','001702','18',0419569,'09','89','03','%4')

Значение поля Категория обучения неверно

2. Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.

Триггер для оператора INSERT

create trigger vuzins on vuz

for insert as

insert into vuz_gorod

(cod_vuza,nazvanie_vuza)

select inserted.cod,inserted.uch_zavedenie from inserted

Пример

insert vuz values

(123456,'Ин-т Екатерины Великой')

Триггер для оператора UPDATE

create trigger vuzupd on vuz

for update as

declare @cod1 integer

declare @uch_zav1 char(25)

declare @cod2 integer

declare @uch_zav2 char(25)

declare cur1 cursor for select cod, uch_zavedenie from inserted

open cur1

fetch cur1 into @cod1,@uch_zav1

close cur1

declare cur2 cursor for select cod, uch_zavedenie from deleted

open cur2

fetch cur2 into @cod2,@uch_zav2

close cur2

if not(@cod1=@cod2)

update vuz_gorod

set cod_vuza=@cod1

where cod_vuza=@cod2

if not(@uch_zav1=@uch_zav2)

update vuz_gorod

set nazvanie_vuza=@uch_zav1

where nazvanie_vuza=@uch_zav2

deallocate cur1

deallocate cur2

Пример

update vuz

set cod=654123

where cod=123456

Триггер для оператора DELETE

create trigger vuzdel on vuz

for delete as

declare @cod integer

declare @uch_zav char(25)

declare cur cursor for select cod,uch_zavedenie from deleted

open cur

fetch cur into @cod,@uch_zav

close cur

delete from vuz_gorod

where cod_vuza=@cod

Пример

delete from vuz

where cod=654321

3. Собственный триггер.

При удалении записей из таблицы GOROD, автоматически становятся неопределенным поля Код города и Название города и таблицы VUZ_GOROD

create trigger ourtrig on gorod

for delete as

declare @cod char(3)

declare @name char(20)

declare cursd cursor for select cod,nazvanie_goroda from deleted

open cursd

fetch cursd into @cod,@name

close cursd

update vuz_gorod

set cod_goroda=null

where cod_goroda=@cod

update vuz_gorod

set nazvanie_goroda=null

where nazvanie_goroda=@name

delete from gorod

where cod='251'

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