Skip Navigation LinksAnasayfa > Etiketler
Sql : Tetikleyiciler (Triggers) ve kullanım alanları Tetikleyiciler veritabanlarında veri bütünlüğünü, mimarisini korumak ve uygulama mantığına özel kurallar (business rules) uygulamak için kullanılan nesnelerdir.
Tetikleyiciler veritabanında gerçekleşen bir veri işleminin ardından otomatik olarak çalışan nesnelerdir. Genelde tablolar üzerinden yapılan işlemler ardından çalıştırılırlar. (View objeleri için de trigger yazmak mümkündür.)

Gerçek bir senaryo ele alalım: Veritabanımızda çok kritik verileri sakladığımız "Transactions" isimli bir tablomuzun olduğunu ve bu tablodaki verilerin her ne şart altında olursa olsun silinmemesi gerektiğini varsayalım. (Kullanıcı izinleriyle kısıtlarız dediğinizi duyar gibi oluyorum; peki sa kullanıcısı kazayla silerse? Bizim amacımız her şartta veri silinmesini engellemek.)
İstediğimiz işlevselliği Transactions tablosu üzerine yazacağımız bir tetikleyici ile sağlayabiliriz. Bu örnekte yazacağımız tetikleyici INSTEAD OF ........ tetikleyicisi olacaktır.

CREATE TRIGGER [dbo].[trg_Transactions_Prevent_Delete]
ON [dbo].[Transactions] INSTEAD OF DELETE
AS
BEGIN
-- Transactions tablosundan veri silinmesini engeller.
SET NOCOUNT ON;
RAISERROR ('It's not allowed to delete any data from this table (source = instead of)', 16, 1)
END


Örnekteki INSTEAD OF DELETE ifadesi ile başlayan tetikleyici, Transactions tablosu üzerinde yapılan delete işlemleri sonrası devreye girerek silme işleminin gerçekleşmemesini sağlar.
RAISERROR fonksiyonu çok kullanışlı bir bir hata üretme fonksiyonudur. Ayrıntılara buradan göz atabilirsiniz.

Farklı bir örnekte ise FOR .... tetikleyicilerini inceleyelim :

Ürünlerimizin stok durumunu tutan Stock isimli bir tablomuz olsun. Bu tablomuzda yer alan herhangi bir ürün miktarı 10 tanenin altına düşerse sistem uyarılarımızın yer aldığı Alerts tablosuna bir mesaj yazsın. (Sql server email atabilir, üçüncü parti bileşenler üzerinden sms atabilir vs. Activex objeler ve .net componentleri ile entegre çalışabilir.)

CREATE TRIGGER [dbo].[trgCheckStockStatus] ON [Stock]
FOR UPDATE
AS
BEGIN

DECLARE @ProductID bigint
DECLARE @StockItem int

SELECT @ProductID = ProductID FROM inserted

SELECT @StockItem = ISNULL(COUNT(*),0) FROM Stock WHERE ProductID=@ProductID

IF (@StockItem <10)
BEGIN
INSERT INTO Alerts (ProductID, AlertText)
VALUES (@ProductID, STR(@ProductID) + ' referans numaralı ürün stoklarda azalmıştır!')
END

END


trgCheckStockStatus tetikleyicisi Stock tablosu üzerindeki her update işlemi sonrası çalışarak ürün sayısını kontrol eder. Bu örnekte ele aldığımız trigger kendi kurallarımızı yazmamız için bir örnek teşkil etmektedir.

Kurumsal uygulamalarda veritabanı üzerindeki sistematik kontroller tetikleyiciler ile gerçekleştirilir. Tetikleyicilerin doğru kullanıldığında çok faydalı kullanım alanları olduğunu görmüş olduk. Tetikleyicilerin kullanım risklerine ve yanlış kullanım örneklerine başka bir yazıda devam edeceğiz.

"Tetikte" kalın.

Eklenme Zamanı7/3/2007 10:26 PM   Yorum EkleYorumlar (0)   EtiketlerEtiketler : sql , sql server , trigger