Файл: 7 зертханалы Жмыс бойынша есеп беру таырыбы Триггерлер Пнні атауы Серверлік деректер орлары Білім беру бадарламасы 6В06103 Есептеу техникасы жне бадарламалы амтамасыз ету.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 03.02.2024

Просмотров: 14

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Қазақстан Республикасы білім және ғылым министрлігі

«Ғұмарбек Дәукеев атындағы Алматы энергетика және байланыс университеті» коммерциялық емес АҚ

Ақпараттық технологиялар институты

IT-инжиниринг кафедрасы

7 ЗЕРТХАНАЛЫҚ ЖҰМЫС

бойынша

ЕСЕП БЕРУ

Тақырыбы: Триггерлер

Пәннің атауы: Серверлік деректер қорлары

Білім беру бағдарламасы: 6В06103 – «Есептеу техникасы және бағдарламалық қамтамасыз ету»

Тобы: ВТПОук-21-1

Орындаған: Каирхан Н.

Қабылдаған: доценті ф.-м. ғ. к. Аманбаев А.А

Алматы. 2022

  1. Зертханалық жұмыс. Триггерлер



Жұмыстың мақсаты: студенттерді деректер базасына функциялар мен триггерлерді скриптпен және СУБД 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

Бақылау сұрақтары


  1. Функцияларды қолданудың артықшылығы неде?

  2. Процедуралар мен функциялардың айырмашылығы қандай?

  3. Триггерлер қашан орындалады – INSERT, UPDATE және DELETE бұйрықтарын орындағанға дейін, әлде кейін?

  4. Триггерді өзгертуге бола ма?



Әдебиеттер тізімі

Негізгі:

  1. Аманбаев А.А., Сатимова Е.Г., Карымсакова Н.Т. Деректер базаларының жүйесі. Зертханалық жұмыстарды орындауға арналған әдістемелік нұсқау. – Алматы: АУЭС, 2013.

  2. А. А. Аманбаев , Е.Г. Сатимова. Работа в Microsoft SQL Server 2008. Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальностей. – Алматы: АУЭС, 2011. – 67 с.

  3. Баженова И.Ю. Основы проектирования приложений баз данных. - М.: «Бином», 2013

  4. Илюшечкин В.М. Основы использования и проектирования баз данных. - М.: Юрайт», 2010

  5. Хомоненко А. Базы данных. – СПб., 2010

  6. Кумскова И. Базы данных.- М. «Вильямс», 2012

  7. Советов Б.Я. Базы данных. Теория и практика.-М. «Юрайт», 2007,2012.

  8. Туманов В.Е. Основы проектирования реляционных баз данных.- М.,

2012

  1. Леонард Л. И др. Разработка приложений на основе Microsoft SQL Server 2008.- М., 2010 Интернет ресурстары:

  2. https://www.cbtnuggets.com/

  3. https://www.udemy.com/



Қосымша:

  1. О.С.Ахметова. Базы данных. - А.:КазНПУ», 2012

  2. Грабер М. Введение в SQL.- М.: «Лори», 2004,2010

  3. Фуфаев Э.В. Базы данных. - М., 2005,2006,2007,2011

  4. Смирнов С.Н. Практикум по работе с базами данных. - М.: «Гелиос

АРВ», 2012

5>21>