Файл: 7 зертханалы Жмыс бойынша есеп беру таырыбы Триггерлер Пнні атауы Серверлік деректер орлары Білім беру бадарламасы 6В06103 Есептеу техникасы жне бадарламалы амтамасыз ету.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.02.2024
Просмотров: 14
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Қазақстан Республикасы білім және ғылым министрлігі
«Ғұмарбек Дәукеев атындағы Алматы энергетика және байланыс университеті» коммерциялық емес АҚ
Ақпараттық технологиялар институты
IT-инжиниринг кафедрасы
№7 ЗЕРТХАНАЛЫҚ ЖҰМЫС
бойынша
ЕСЕП БЕРУ
Тақырыбы: Триггерлер
Пәннің атауы: Серверлік деректер қорлары
Білім беру бағдарламасы: 6В06103 – «Есептеу техникасы және бағдарламалық қамтамасыз ету»
Тобы: ВТПОук-21-1
Орындаған: Каирхан Н.
Қабылдаған: доценті ф.-м. ғ. к. Аманбаев А.А
Алматы. 2022
-
Зертханалық жұмыс. Триггерлер
Жұмыстың мақсаты: студенттерді деректер базасына функциялар мен триггерлерді скриптпен және СУБД MS SQL Server 2008 графикалық ортасында құрып үйрету.
7.1 Зертханалық жұмысқа тапсырмалар
7) ЖОО-на күндізгі оқу түріне жасы 35 тен кіші талапкерлер
қабылданады. Студентті қабылдаған кезде(Students кестесіне мәліметтерді
енгізгенде) жасын бақылауға мүмкіндік беретін триггерді құрыңыз;
create trigger tri_zhas
on Students for insert , update
as
declare @zhas tinyint
select @zhas=2022-YEAR(s.Stud_DATE)
from Students s , Inserted i
where s.Stud_ID=i.Stud_ID and s.Stud_DATE=i.Stud_DATE
if @zhas>35
Begin
rollback tran
raiserror ('Жасы 35 тен кіші болуы тиіс' , 16,10)
end;
INSERT INTO Students(Stud_ID,Stud_FAM,Stud_IMYA,Stud_OTCH,Stud_STAR,Stud_DATE,Stud_ADDRESS,Group_ID,step,Pol)
VALUES(22,'Абсалимов','А','Р',22,'1989-20-06','Астана',3,36000, 'M');
INSERT INTO Students(Stud_ID,Stud_FAM,Stud_IMYA,Stud_OTCH,Stud_STAR,Stud_DATE,Stud_ADDRESS,Group_ID,step,Pol)
VALUES(23,'Бсалимов','П','Р',23,'1985-20-05','Астана',3,36000, 'M');
update Students
set Stud_DATE='1985-14-5' where Stud_ID=22 ;
select * from Students;
--Select s.Stud_FAM,2022-YEAR(s.Stud_DATE) from Students s where 2022-YEAR(s.Stud_DATE)<21 ;
8) Теориялық түрде ДҚ на студентке қателесіп оқылмайтын сабағы
бойынша бағаны енгізіп қоюға болады Тапсырма: Тапсырылған пәннің санын
(қосындысын) (ол студенттің тобымен оқылатын пәндердің санынан аспауы
керек(Progress және Subject кестелері),студенттермен оқылатын пәндер
туралы ақпаратпен бірге (Study кестесі)) бақылайтын триггер құру;
select * from Progress;
select * from Students;
select * from Subject;
select * from Study;
create trigger tri_pp2
on Subject for update
as
declare @Total_Hours int
declare @Total_Hours1 int
select @Total_Hours=i.Lection_Hours+i.Practice_Hours+i.Labor_Hours , @Total_Hours1=i.Total_Hours
from Subject s ,Inserted i
if @Total_Hours <> @Total_Hours1
Begin
rollback tran
raiserror ('Пән сағаты дұрыс енгізілмеген' , 16,10)
end;
declare @Total_Hours int
if not exists (Select @Subj_NAME from Subject where Subj_NAME=@Subj_NAME)
begin
set @Subj_ID = (select max(Subj_ID) from Subject)+1
set @Total_Hours=@Lection_Hours+@Practice_Hours+@Labor_Hours
Insert into Subject
Values (@Subj_ID,@Subj_NAME ,@Total_Hours, @Lection_Hours,@Practice_Hours,@Labor_Hours)
end
If exists (Select @Subj_NAME from Subject where Subj_NAME=@Subj_NAME)
begin
update Subject
set
Lection_Hours=@Lection_Hours,
Practice_Hours=@Practice_Hours,
Labor_Hours= @Labor_Hours
where Subj_NAME=@Subj_NAME
END;
9) Белгілі бір уақыт аралығында қандай болса да кестеге жүргізілген
ДҚ пайдаланушысының әрекеттерін журналға тіркеп тұратын триггер құру;
--журнал курам и соган тиркеп отыру керек
CREATE TABLE journ (
mod_oper CHAR(20), /* Тип производимой операции */
Stud_ID bigint, /* id студента чья оценка была изменена*/
new_ocen integer, /* Измененая оценка*/
old_ocen integer );
drop trigger treg;
alter TRIGGER treg
ON Progress
FOR Update
AS
DECLARE @id int, @ocen int, @old_ocen int
SELECT @old_ocen=P.ocenka,@id = P.Stud_ID , @ocen = i.ocenka
from Progress p ,Inserted i
where p.Stud_ID=i.Stud_ID
insert into journ
VALUES('Обновлена',@id,
@ocen,@old_ocen);
select * from journ;
Update Progress
set OCENKA=8 where Stud_ID=1 and Subj_ID=501;
select * from Progress;
10) Теориялық түрде ДҚ на сессияны қанағаттанарлық бағаға жапқан
студентке қателесіп шәкіртақыны енгізіп қоюға болады. Тапсырма:
Студенттің алынған бағалары мен оның шәкіртақысының бар жоғын
бақылайтын триггер құру;
create trigger tri_so
on Students for insert , update
as
declare @step smallmoney
select @step
from Students s ,Inserted i
where s.Stud_ID=i.Stud_ID
if @step>42000 or @step<36000
Begin
rollback tran
raiserror ('Студенттің степендиясы 42000 мыңнан үлкен 36000 мыңнан кіші болмау керек' , 16,10)
end
update Students
set step=38000 where Stud_ID=1 ;
drop trigger tri_so;
update Progress
set OCENKA=8 where Stud_ID=1 and Subj_ID=501;
create trigger tri_so1
on Progress for update
as
declare @ocenka tinyint
select @ocenka=i.OCENKA
from Progress p ,Inserted i
where p.Stud_ID=i.Stud_ID
if @ocenka<5 or @ocenka>9
Begin
rollback tran
raiserror ('Емтихан бағасын өзгертуге болмайды' , 16,10)
end
select * from Progress;
select * from Students;
select * from Subject;
drop trigger tri_so1
drop trigger tri_so
use baza1;
7.2.2 Триггерлер.
Триггер – бұл компиляцияланған процедура, деректер базасында болатын жағдайлармен иницияланатын әрекеттерді жасауға қолданылады Триггер деректер базасында сақталған процедура болып табылады, ол кестеге қатысты әрекеттер жасалынған кезде жіберіледі. Триггер INSERT, UPDATE немесе DELETE операторларына дейін немесе кейін орындалуы мүмкін. Триггерлердің ең таралған қолданысы – бұл деректер базасындағы күрделі критерийлерді тексеруі. Триггер - SQL-сервердің ерекше құрылғысы, ДҚ да деректердің бүтіндігін демеуші.
CREATE TRIGGER tri_stip ON stud FOR INSERT, UPDATE AS
/*описываются локальные переменные*/
DECLARE @stip smallmoney
/* определяется информация о вставляемых записях*/
SELECT @stip = U.Peop_STIP
FROM Inserted U
IF @stip >15000
BEGIN
/*Команда ROLLBACK используется для того, чтобы отменить модификацию данных в случае, если база заблокирована*/ ROLLBACK TRAN
RAISERROR ('Стипендия студента не может превышать
15000', 16,10) END
Progress кестесі үшін tri_ins_progress триггерін анықтайық, ол Progress кестесіне жазба қойылған сайын немесе модификацияланған сайын жіберілетін болады. Егер емтихан немесе зачет уақытында тапсырылмаса
(мысалы, айдың 15- күнінен кейін), онда жазба қабылданбайды:
CREATE TRIGGER tri_ins_Evolution
ON Evolution FOR INSERT, UPDATE
AS
/*описываются локальные переменные*/
DECLARE @nDayOfMonth TINYINT
/* определяется информация о вставляемых записях*/
SELECT @nDayOfMonth = DATEPART (Day, I.Pr_DATE)
FROM Evolution P, Inserted I
WHERE P.Peop_ID = I.Peop_ID AND P.Ocenka = I.Ocenka
/*проверяется условие вставки записи*/
/*и при необходимости сообщается об ошибке*/
IF @ nDayOfMonth >15
BEGIN
/*Команда ROLLBACK используется для того, чтобы отменить модификацию данных в случае, если база заблокирована*/ ROLLBACK TRAN
RAISERROR ('Вводить оценки, полученные до 15-го числа', 16,10)
END
Progress кестесіне студенттермен 15-нен кейін алынған бағалары туралы мәліметтерді енгізіп көріңіз.
Триггерді келесі түрмен жоюға болады:
DROP TRIGGER имя_триггера
Немесе Аll tasks (барлық есептер) контексттік мәзірінен- Manage Triggers триггердің атын тізімнен таңдау арқылы.
Студентті қосуға триггер: CREATE TRIGGER tr_ins_stud
ON People FOR INSERT
AS
DECLARE @grup integer
SELECT @grup=I.Grup_ID
FROM Inserted I UPDATE Gruppa
SET Grup_KOLSTUD = Grup_KOLSTUD+1
WHERE Gruppa.Grup_ID=@grup
Бақылау сұрақтары
-
Функцияларды қолданудың артықшылығы неде? -
Процедуралар мен функциялардың айырмашылығы қандай? -
Триггерлер қашан орындалады – INSERT, UPDATE және DELETE бұйрықтарын орындағанға дейін, әлде кейін? -
Триггерді өзгертуге бола ма?
Әдебиеттер тізімі
Негізгі:
-
Аманбаев А.А., Сатимова Е.Г., Карымсакова Н.Т. Деректер базаларының жүйесі. Зертханалық жұмыстарды орындауға арналған әдістемелік нұсқау. – Алматы: АУЭС, 2013. -
А. А. Аманбаев , Е.Г. Сатимова. Работа в Microsoft SQL Server 2008. Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальностей. – Алматы: АУЭС, 2011. – 67 с. -
Баженова И.Ю. Основы проектирования приложений баз данных. - М.: «Бином», 2013 -
Илюшечкин В.М. Основы использования и проектирования баз данных. - М.: Юрайт», 2010 -
Хомоненко А. Базы данных. – СПб., 2010 -
Кумскова И. Базы данных.- М. «Вильямс», 2012 -
Советов Б.Я. Базы данных. Теория и практика.-М. «Юрайт», 2007,2012. -
Туманов В.Е. Основы проектирования реляционных баз данных.- М.,
2012
-
Леонард Л. И др. Разработка приложений на основе Microsoft SQL Server 2008.- М., 2010 Интернет ресурстары: -
https://www.cbtnuggets.com/ -
https://www.udemy.com/
Қосымша:
-
О.С.Ахметова. Базы данных. - А.:КазНПУ», 2012 -
Грабер М. Введение в SQL.- М.: «Лори», 2004,2010 -
Фуфаев Э.В. Базы данных. - М., 2005,2006,2007,2011 -
Смирнов С.Н. Практикум по работе с базами данных. - М.: «Гелиос
АРВ», 2012
5>21>