Mavzu: Triggerlar.
Reja:
1.
Triggerlar konstruktori.
2.
AFTER
turidagi triggerlar.
3.
INSTEAD OF
turidagi triggerlar.
Triggerlar
- jadval yoki ko‘rinishda ma'lumotlarni qo‘shish, o‘zgartirish yoki
o‘chirishda, ya'ni INSERT, UPDATE, DELETE buyruqlarini bajarishda avtomatik
ravishda chaqiriladigan maxsus turdagi saqlanadigan protseduralardir.
Trigger konstruktori:
CREATE TRIGGER
trigger_nomi
ON {
jadva_nomi
|
ko‘rinish_nomi
}
{
AFTER | INSTEAD OF} [INSERT | UPDATE | DELETE]
AS
operatorlar
Trigger CREATE TRIGGER buyrug‘idan keyin trigger nomi bilan yaratiladi.
Keingi qadamlarda qoida tariqasida, trigger nomi operatsiyalar turini va operatsiya
bajariladigan jadval nomini aks ettiradi.
Har bir trigger ON so‘zidan keyin nomi ko‘rsatilgan ma’lum bir jadval yoki
ko‘rinish bilan bog‘langan .
Keyingi qadamda trigger turi o‘rnatiladi. MSSQL
Serverda triggerlarning
ikkita turdan biridan foydalanish mumkin. Ular quyidagilardir:
1.
AFTER:
operatsiya tugallangandan keyin bajariladi. Ushbu triggerlardan
faqat jadvallarda bajariladigan amallarda foydalanish mumkin.
2.
INSTEAD OF:
harakat o‘rnida bajariladi (ya’ni, aslida harakat – qo‘shish,
o‘zgartirish yoki o‘chirish – umuman bajarilmaydi). Jadvallar va
ko‘rinishlar uchun belgilangan.
Trigger turi aniqlab olingandan so’ng keyin trigger aniqlanayotgan so’rov
(INSERT , UPDATE yoki DELETE) keladi.
AFTER
turidagi triggerlarni bir vaqtning o'zida bir nechta so’rovlarga
qo'llash mumkin, masalan, UPDATE va INSERT.
Bunday holda, operatsiyalar
vergul bilan ajratilgan holda belgilanadi.
INSTEAD OF
turidagi triggerlar uchun
faqat bitta so’rovni belgilash mumkin.
Keying qadamda
AS
kalit so'zidan keyin trigger tanasini tashkil etuvchi SQL
so’rovlari to'plami beriladi.
Quyidagi misolda trigger yaratish batafsil ko’rsatib o’tilgan.
Dastavval, quyidagi
productsdb
ma'lumotlar
bazasi va unda
Products
jadvali
yaratib olinadi.
1
2
3
4
5
6
7
8
9
10
11
12
CREATE DATABASE productdb;
GO
USE productdb;
CREATE TABLE Products
(
Id INT IDENTITY PRIMARY KEY,
ProductName NVARCHAR(30)
NOT NULL,
Manufacturer NVARCHAR(20) NOT NULL,
ProductCount INT DEFAULT 0,
Price MONEY NOT NULL
);
Quyidagi so’rvda
yaratib olingan
Products
jadvali uchun ma'lumotlarni
qo'shish va yangilashda ishga tushadigan triggerni hosil qilish ko’rsatilgan.
1
2
3
4
5
6
7
8
9
USE productdb;
GO
CREATE TRIGGER Products_INSERT_UPDATE
ON Products
AFTER INSERT, UPDATE
AS
UPDATE Products
SET Price = Price + Price * 0.38
WHERE Id = (SELECT Id FROM inserted)
Aytaylik,
Products
jadvali mahsulotlar haqidagi ma'lumotlarni saqlaydi.
Ammo tovarlarning narxi ko'pincha qo'shilgan qiymat solig'i, aksiz solig'i va boshqa
undiriladigan turli xil qo'shimcha to'lovlarni o'z ichiga oladi. Ma'lumotni
qo'shayotgan shaxs soliq bazasi bilan bog’liq barcha to’lovlar miqdorini bilmasligi
yoki ushbu to’lovlar ma’lum vaqtda o’zgarib turishi mumkin. Trigger yordamida biz
mahsulot hisoblashda barcha to’lovlarni belgilangan miqdorda sozlashimiz mumkin.
Shunday qilib,
trigger
Products
jadvalidagi barcha INSERT va UPDATE
so’rovlarida ishga tushadi. Triggerning o'zi mahsulot narxini o'zgartiradi va
qo'shilgan yoki o'zgartirilgan mahsulotni olish uchun
biz ushbu mahsulotni Id
bo'yicha topamiz. Ammo bunday mahsulotning identifikatori qanday qiymatga ega
bo'lishi kerak? Gap shundaki, qo'shish yoki o'zgartirish paytida ma'lumotlar
kiritilgan oraliq jadvalda saqlanadi. U avtomatik ravishda yaratiladi. Va undan biz
qo'shilgan yoki o'zgartirilgan mahsulotlar haqida ma'lumot olishimiz mumkin.
Products
jadvaliga mahsulotni qo'shgandan so'ng, aslida mahsulot qo'shish
paytida aniqlanganidan narxida yuqoriroq narxga ega bo'ladi:
Nazorat savollari:
1.
Triggerlar konstruktori qanday ko’rinishda?
2.
AFTER
turidagi triggerlar qanday hosil qilinadi?
3.
INSTEAD OF
turidagi triggerlar.
1.
Insert so’rovi uchun triggerlarning qaysi turidan foydalanish mumkin?