Trigger-I (DML)

Veritabanında belirlenen bir işleme bağlı olarak başka işlemlerin gerçekleştirilmesi gerekliliği varsa, bu işlemler trigger sayesinde yapılır. Yani bir tabloda değiştirilen veri diğer tablodaki bazı satırlarında değişmesini sağlayacaksa,olayın gerçekleşmesinde triggerlar kullanılır. Bir ürünümüz için sipariş verildi diyelim. Siparişler tablosuna sipariş girildiğinde ürünler tablosundan stokdaki ürün sayısı sipariş miktarı düşecektir yada yapılan herhangi bir güncelleme diğer tablolarda da güncelleme gereği doğuracaktır. Triggerlar bu işlemlerin yapılmasını sağlayan bir çeşit fonksiyon gibi düşünebiliriz. Ancak fonksiyon gibi çağrılmaları yoktur, işlemler arka planda otomatik olarak yapılacaktır. DML(insert,update,delete) vd DDL(alter.drop) olmak üzere 2 çeşit trigger tipimiz vardır. Bu yazıda DML trigger için giriş yapmış olacağız. Diğer yazılarda daha ayrıntılı olarak bahsedeceğiz.

Northwind’ de Order Detail tablosuna bir teklif girdiğimizde Products tablosundaki UnitsInStock kısmından girdiğimiz veri kadar düşme yapan trigger yazalım.

Sorguyu çalıştırmadan önce;

Ekran Alıntısı1

 

 

Urunkodunu ve siparis adedini dışardan alan order detailse insert yapılacağı zaman, Products tablosunu güncelleyen trigger yazdık.


--create trigger triggeradi
--on hangi tablo
--for hangi sorgu as
--begin
--islemler
--end

create trigger SiparisVer
on [Order Details] for insert as
begin
declare @urunkodu int, @siparisadedi int
select @urunkodu=ProductID, @siparisadedi=Quantity from inserted
update Products set UnitsInStock-=@siparisadedi where ProductID=@urunkodu
end

insert [Order Details] (OrderID,ProductID,Quantity) values (10628,11,5)

Ekran Alıntısı2

 

 

Yanlış girilen sipariş sonucu Order’ı silmemiz sonucu Product tablosunu eski haline güncelleyen trigger yazdık.


create trigger Siparisİptal
on [Order Details] for delete as
begin
declare @urunkodu int, @siparisadedi int
select @urunkodu=ProductID, @siparisadedi=Quantity from deleted
update Products set UnitsInStock+=@siparisadedi where ProductID=@urunkodu
end

delete [Order Details] where OrderID=10628

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir