Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

Лабораторна робота № 6

Процедури, що зберігаються. Тригери

Мета роботи: дослідження властивостей та можливостей процедур, що збе-


рігаються та тригерів.
Побудувати до БД «Рейтинг» процедури, що зберігаються:

1. Розрахунок середнього балу студентів за період – без урахування перездач.


create procedure MidNoRework @date1 date, @date2 date
as
select Rozklad_pids.Date, avg(Reiting.Reiting) as MidRes
from Reiting inner join Rozklad_pids on Reiting.K_zapis = Rozklad_pids.K_zapis
where Rozklad_pids.Date between @date1 and @date2
group by Rozklad_pids.Date;
execute MidNoRework @date1 = '2017-01-05', @date2 = '2018-01-07';

2. Розрахунок середнього балу студентів за період – з урахування перездач.


create procedure MidRework @date1 date, @date2 date
as
select Rozklad_pids.Date, avg(Reiting.Reiting) as MidRes
from Reiting inner join Rozklad_pids on Reiting.K_zapis = Rozklad_pids.K_zapis
where Rozklad_pids.Date between @date1 and @date2
group by Rozklad_pids.Date;
execute MidRework @date1 = '2017-01-05', @date2 = '2018-01-07';

3. Визначення студентів, що навчаються на 4 та 5.


create procedure GoodMarks @MarkMin int = 74, @MarkMax int = 100
as
select distinct dbo_student.Name, dbo_student.Fname
from dbo_student inner join Reiting on dbo_student.Kod_stud = Reiting.Kod_student
WHERE Reiting.Reiting between @MarkMin and @MarkMax;
execute GoodMarks;

ДУ «Житомирська політехніка».23.126.06.000 – Лр6


Змн. Арк. № докум. Підпис Дата
Розроб. Гилюк В.В Літ. Арк. Аркушів
Перевір. Коротун О.В 1 4
Керівник
Звіт з
Н. контр. лабораторної роботи ФІКТ Гр. ІСТ-21-1
Зав. каф.
4. Процедура виводить суму балів та її значення в національній системі та
ECTS.
create procedure Marks
as
select dbo_student.Name_ini, avg(Reiting.Reiting) as Reit,
case
when avg(Reiting.Reiting) between 90 and 100 then 5
when avg(Reiting.Reiting) between 75 and 89 then 4
when avg(Reiting.Reiting) between 60 and 74 then 3
when avg(Reiting.Reiting) between 1 and 59 then 2
end as CifferMarks,
case
when avg(Reiting.Reiting) between 90 and 100 then 'A'
when avg(Reiting.Reiting) between 82 and 89 then 'B'
when avg(Reiting.Reiting) between 74 and 81 then 'C'
when avg(Reiting.Reiting) between 64 and 73 then 'D'
when avg(Reiting.Reiting) between 60 and 63 then 'E'
when avg(Reiting.Reiting) between 35 and 59 then 'FX'
when avg(Reiting.Reiting) between 0 and 34 then 'F'
end as LetterMarks
from dbo_student inner join Reiting on dbo_student.Kod_stud = Reiting.Kod_student
group by dbo_student.Name_ini;
execute Marks;

Гилюк В.В Арк.


Коротун О.В. ДУ «Житомирська політехніка».23.126.06.000 – Лр6
2
Змн. Арк. № докум. Підпис Дата
5. Тригер на вставку даних в таблицю студент – якщо код групи новий в таб-
лицю додається група.
create trigger NewStudCheck
on dbo_student
for insert
as
if @@ROWCOUNT = 1
begin
if exists(select * from inserted where inserted.Kod_group not in (select dbo_groups.Kod_group
from dbo_groups))
begin
insert into dbo_groups (Kod_group, Kod_men, Kod_zhurn, K_navch_plan, kilk)
select inserted.Kod_group, 4, 2, 15, 15 from inserted
end
print 'Додано'
end;
-------------------
set identity_insert dbo_student on

insert into dbo_student(Kod_stud, Sname, Name, Fname, N_ingroup, Kod_group) values


(104,'Граa', 'Марина', 'Олексіївна', '1', 'ПІ-55');

6. Тригер на модифікацію даних з таблиці студенти якщо більше немає студе-


нтів в групі група знищується.
create trigger EmptyGr
on dbo_student
for delete
as
if @@ROWCOUNT = 1
begin
declare @tempGroup varchar(10)
if exists(select dbo_groups.Kod_group from dbo_groups where dbo_groups.Kod_group not in
(select dbo_student.Kod_group from dbo_student))
begin
select @tempGroup = dbo_groups.Kod_group from dbo_groups
where dbo_groups.Kod_group not in (select dbo_student.Kod_group from dbo_student)
delete dbo_groups where dbo_groups.Kod_group = @tempGroup
end
print 'Видалено групу'
end;
Для БД за індивідуальним завданням реалізувати:
1. Процедури, що зберігаються - не менше 3 (для запитів на пошук обов’яз-
ково).
create procedure SearchNum @Nums varchar(12)
as
select ImportKoresp.ImPhoneNum, Departament.NameDep
from ImportKoresp inner join Departament on ImportKoresp.idDep = Departament.idDep
where ImportKoresp.ImPhoneNum like @Nums
execute SearchNum '(096)%';

create procedure EarliestNakaz @Mini datetime = '2020-01-03 16:59:30.973'


as
select Nakazy.idNakaz, Nakazy.VykonavezNakazu, Nakazy.DateVykonPr, Departament.NameDep
from Nakazy inner join Departament on Nakazy.idDep = Departament.idDep
where Nakazy.DateVykonPr = @Mini
execute EarliestNakaz;

Гилюк В.В Арк.


Коротун О.В. ДУ «Житомирська політехніка».23.126.06.000 – Лр6
3
Змн. Арк. № докум. Підпис Дата
create procedure SearchZhytomyr
as
select OrdOrg.NameOrg, OrdOrg.AddrOrg, OrdOrg.PhoneNumOrg from OrdOrg where OrdOrg.AddrOrg
like 'м. Ж%';
execute SearchZhytomyr;

2. Тригери для таблиць – не менше 3.


1)
create trigger DelCity
on Calls
for delete
as
if @@ROWCOUNT = 1
begin
if exists(select Calls.AbonentCity from Calls where Calls.AbonentCity like 'м. Луцьк')
begin
delete from Calls where Calls.AbonentCity like 'м. Луцьк'
end
print 'Видалено місто'
end

2)
create trigger UpdDep
on Departament
for update
as
if @@ROWCOUNT = 1
begin
if exists(select Departament.idDep from Departament where Departament.NameDep like '%техн%')
begin
update Departament set NameDep = NameDep + 'важливий' where Departament.NameDep like '%техн%'
print 'Змінено назви відділів'
end
end
3)
create trigger InsertOrg
on OrdOrg
for insert
as
if @@ROWCOUNT = 1
begin
if exists(select * from inserted where inserted.NameOrg not in (select * from OrdOrg))
begin
insert into OrdOrg(NameOrg, AddrOrg, PhoneNumOrg, RozrahNumOrg, PredstavitelOrg)
select NameOrg, AddrOrg, PhoneNumOrg, RozrahNumOrg, PredstavitelOrg from inserted
print 'Додано'
end
end
Висновок: під час лабораторного досліду було досліджено властивості та
можливості процедур, що зберігаються та тригерів, створив тригери та процедури,
що зберігаються, для БД «Рейтинг» та для БД за індивідуальним варіантом («Бюро
діловодства»).

Гилюк В.В Арк.


Коротун О.В. ДУ «Житомирська політехніка».23.126.06.000 – Лр6
4
Змн. Арк. № докум. Підпис Дата

You might also like