Merhaba arkadaşlar daha önce procedure ve fonksiyonlara bakmıştık. Bu yazımda ise Triggerlar konusuna bakacağız.
Trigger Nedir?
Trigger’ın Türkçe anlam karşılığı tetikleyici anlamına gelmektedir. Buradan yola çıkarak tablo da oluşan bir değişiklik tetikleyici unsur olmaktadır. Örnek vermek gerekirse personel tablosuna bir personel eklendiğinde 1 rows affected yerine “yeni bir personel eklendi” mesajı verilmelisidir.
Procedure’lerden tek farkı otomatik olarak gerçekleşiyor olmasıdır.
İki türü vardır, birincisi ana sorguyu engellemek, ikincisi ise sorgu ile birlikte çalışması için kullanılır. Bir veritabanı nesnesidir.
Trigger Oluşturma Kalıbı
CREATE TRIGGER trigger_adi
ON tablo_adi
AFTER neyden_sonra –/ INSERT/ UPDATE/ DELETE gibi
AS
BEGIN
— Buraya işlemler gelecek
END
Trigger Örnekleri
Yeni bir personel eklendiğinde “Yeni bir personel eklendi” diye yazan Trigger’ı yazalım üstteki kalıba göre..
CREATE TRIGGER yeniPersonel
ON Personel
AFTER INSERT
AS
BEGIN
Select ‘Yeni Bir Personel Eklendi’
END
Ekran görüntüsü aşağıdaki gibidir.
Bir de yeni personel ekleyerek sonucunu görelim. Ben gerçek veri kullandığımdan soyisimleri gizlemek zorunda kaldım.
Gördüğünüz gibi herhangi bir tetikleme yapmadım. Trigger INSERT işleminden sonra çalışsın deyip yeni bir kayıt yaptım.
Aynı anda birçok trigger çalışabilir.
Personel Eklendikçe Toplam Personel Sayısını Artıran Trigger
Üstteki Trigger’ın örneğinden küçük bir farkla bu Trigger’ımızı da yazalım. PersonelSayisi diye bir tablomuz ve bu tablomuzda sayac diye bir sütunumuz olsun.
CREATE TRIGGER personelSayisiGuncelle
ON PersonelSayisi –Tablo Adı
AFTER INSERT –Insert İşleminden Sonra
AS
BEGIN
Update PersonelSayisi Set sayac = sayac + 1 –Yapılacak işlem
END
Öğrenci Silindikten Sonra Öğrenci Silindi Mesajı Veren Trigger
Yine aynı şekilde genel kalıbımızda boşlukları dolduruyoruz.
CREATE TRIGGER silmeBilgisi
ON Ogrenci
AFTER DELETE
AS
BEGIN
SELECT ‘Öğrenci Silindi’
END
Üst Üste İşlemleri Engelleyen Trigger
Örnek olarak bir silme işlemi için gün içinde 10 defa silme hakkı verilsin. Kullanıcı 11.silim işlemini yapmak istediğinde ekrana silme hakkınız bitti diye uyarı mesajı verelim. Bu trigger örneğinde ürünleri kullanalım.
CREATE TRIGGER silmeKontrol
ON urunler –tablo adi
AFTER DELETE –silme işlemi
AS
BEGIN
DECLARE @sayi int
SELECT @sayi = Sayac From Sayac –Sayac tablosunda Sayacımız olsun
IF @sayi > 0
BEGIN
SELECT ‘Ürün Silindi’
UPDATE Sayac SET Sayac = Sayac – 1
END
IF @sayi <=0
BEGIN
SELECT ‘Silme İşlemi Başarısız Maksimum 10 defa silme hakkınız bitmiştir.’
END
END
[the_ad id=”1292″]
INSTEAD OF TRIGGER
Yukarıda nedir kısmında açıkladığım iki tür vardı. Yukarıda verdiğim örnekler bir işlemden sonra olan yani After Trıgger örnekleriydi. Şimfi Instead Of’a bakalım.
Sadece basit bir örnek verecem. Sorgu çalışıp çalışmadığı gibi durumlarda kullanılırlar. Bizde ekleme işleminden sonra bir test Trigger’ı yazalım.
CREATE TRIGGER ınsteadDeneme
ON ogrenci
INSTEAD OF INSERT
AS
BEGIN
SELECT ‘Ekleme işlemi testidir. Ekleme işlemi başarı ile çalışmaktadır’
END
Yukarıdaki Instead Of Triggerlar silinmediği sürece kayıtlar tabloya eklenmez. Update ve Delete işlemleri içinde aynısı geçerlidir.
Triggerlar konusu bu kadar, umarım anlaşılır olmuştur.