Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы (А-13-07) / Дудкина, Захаров / Отчет по лабораторной работе №9

.docx
Скачиваний:
42
Добавлен:
28.06.2014
Размер:
352.68 Кб
Скачать

Московский Энергетический Институт, Технический Университет

ЛАБОРАТОРНАЯ РАБОТА №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