Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

SQL Server - Triggers.

Benzer bir sunumlar


... konulu sunumlar: "SQL Server - Triggers."— Sunum transkripti:

1 SQL Server - Triggers

2 Trigger Nedir? Niçin Kullanılır?
A trigger is a special type of stored procedure, which is fired automatically when data in a specified table is modified. It is invoked when an INSERT, UPDATE or DELETE action is performed on a table. Değişiklikleri takip etmek, Birincil anahtar üretmek, Karmaşık iş kurallarını gerçekleştirmek, E-posta atmak gibi olayları otomatik olarak yapmak, Standart hata mesajlarının dışında bir hata mesajı elde etmek, Veritabanı erişimlerini takip edebilmek, Nesnede meydana gelebilecek değişiklikleri takip etmek ve gerektiğinde engellemek için kullanılırlar.

3 Trigger Çeşitleri After/For Triggerlar: After triggerlar, kendiyle ilişkili işlem gerçekleştikten hemen sonra ateşlenir. Sadece tablolar için tanımlanabilir. (SQL 2005 öncesinde «After» şeklinde kullanıyordu.) Instead Of Triggerlar: Belirlenen işlem gerçekleşirken devreye girer ve kendi içinde tanımlanan komutları icra etmeye başlar. Yani, belirlenen işlemin yerine geçer. After/For tetikleyicileri sadece tablolar için tanımlanabilirken Instead Of tetikleyicileri hem tablolar için hem de view’ler için tanımlanabilirler.

4 Trigger Oluşturma/Değiştirme ve Çalıştırılması
CREATE TRIGGER triggeradi [With Options] ON tabloadı --- Tablo (For ve Instead Of) veya View (Instead Of) adı belirtilir FOR INSERT/UPDATE/DELETE --- Çoklu kullanım durumlarında virgülle ayrılırlar AS SQL İfadeleri Oluşturulan trigger veya triggerlar, hangi nesnenin hangi eylemi için tanımlanmışsa; o durum gerçekleştiğinde trigger veya triggerlar kendiliğinden devreye girer ve görevini yapar. Varolan bir triggerın yapısının değiştirilmesi için yukarıdaki koddaki Create yerine Alter kullanmak yeterlidir.

5 CREATE TRIGGER tr_OgrenciEkle ON tbOgrenciler FOR INSERT AS varchar(20) isim FROM inserted) --- Inserted ve Deleted sanal tabloları kullanılır isimli öğrenci eklenmiştir...' Çalıştırılması: Insert into tbStudents(name) values (‘Hasan’) Hasan isimli öğrenci eklenmiştir...' Ekrana yazılır

6 Trigger’lar çalıştığı zaman INSERTED ve DELETED tablolarını kullanır
Trigger’lar çalıştığı zaman INSERTED ve DELETED tablolarını kullanır. Bu iki tablo da triggerın tetiklendiği tabloyla aynı alanlara sahiptir ve RAM’de tutulurlar. Gerçek tabloya bir kayıt eklendiğinde trigger tetiklenirse, bu kayıtın aynısı INSERTED tablosuna da eklenir. İhtiyaç olduğunda yeni eklenen değerlere buradan ulaşılabilir. Tablodan bir kayıt silinirse, silinen kayıt DELETED tablosunda saklanır.

7 UPDATE işleminde ise DELETE ve hemen arkasından yapılmış bir INSERT işlemi şeklinde düşünülür. Bir kayıt update edildiğinde orjinal kayıt DELETED tablosuna; değişen kayıt ise INSERTED tablosuna ve gerçek tabloya yazılır. INSERTED ve DELETED tabloları, transaction log dosyalarından oluşturulur.

8 Trigger’lara dışarıdan parametre gönderilmez
Trigger’lara dışarıdan parametre gönderilmez. Ancak INSERTED ve DELETED tabloları sayesinde son işlemden etkilenen kayıtlar tespit edilebilir. INSERT/UPDATE/DELETE gibi birden fazla olayın hangi sırayla devreye gireceği bilinemez. Bu yüzden sırayla çağırılması tavsiye edilir. ALTER DATABASE, CREATE DATABASE, DROP DATABASE, RESTORE DATABASE… gibi komutlar trigger içerisinde kullanılamaz.

9

10 Trigger Adının Değiştirilmesi, Görüntülenmesi, Silinmesi
Sp_rename ‘trigAddStudents’, ‘trigAddStudents_New’ --- Triggerın adını değiştirir Sp_helptext triggeradı --- Varolan triggerın kodunu görüntüler. (Encryption option kullanılmamış ise) Sp_helptrigger tabloadı --- Bir tablo üstündeki triggerları listeler DROP TRIGGER triggeradı --- Belirtilen isimli triggerı siler

11 Stok Azaltma örneği. Satılan her mal için stok miktarının 1 azaltılması istenilmektedir.
CREATE TRIGGER stokAzalt ON tbSiparis AFTER INSERT AS SET Nocount On UPDATE tbUrun SET stokdurum=stokdurum-1 FROM tbUrun u INNER JOIN Inserted I ON u.urunkod=I.urunkod

12 Sipariş tablosundan bir kayıt silen ve silinen kayıt ile ilgili ekrana mesaj yazan trigger.
CREATE TRIGGER trSiparisSil ON tbSiparis FOR DELETE AS int FROM deleted PRINT as varchar(10)+’ silinmiştir.’ SQL Server satır bazlı trigger desteği vermez. Yani örnekteki senaryoda tek bir kayıt silinirse Print satırı 1 kere çalışır. Ama örneğin «siparişno’su 50’den küçük olanların silinmesi» gibi çoklu silme durumunda her silinen kayıt için Print satırı çalışmaz. Sadece ilk kayıt için çalışır.

13 Kontrol edilmemiş kayıtların silinmesini engelleyen trigger
CREATE TRIGGER trBakmadansilme ON tbSiparis AFTER DELETE AS IF EXISTS(SELECT * FROM tbsiparis s JOIN deleted d ON s.faturakod=d.faturakod WHERE s.sipariskontrol=0) Kontrol edilmemiş sipariş durumu (0) BEGIN RAISEERROR(‘Siparişe bakmadansilemezsin’,10,1) ROLLBACK END

14 Ürün fiyatlarının azaltılması engelleyen, sadece artırımına izin veren (kontrol eden) trigger
CREATE TRIGGER trUrunFiyatiAzalamaz ON tbUrun AFTER UPDATE AS IF EXISTS(SELECT * FROM Inserted I INNER JOIN Deleted d ON I.urunkod=d.urunkod WHERE d.listefiyat>I.listefiyat) BEGIN RAISEERROR(‘Ürün fiyatı azaltılamaz’,10,1) ROLLBACK END

15 Triggerların Aktif/Pasif Hale Getirilmesi
DISABLE/ENABLE trigger triggeradı ON tabloadı Örnek : DISABLE TRIGGER adetazalamaz ON tbsiparis ALTER TABLE tabloadı DISABLE TRIGGER triggeradı Örnek: ALTER TABLE tbsiparis ENABLE TRIGGER adetazalamaz --- adetazalamaz’ı devredışı bırakır DISABLE TRIGGER ALL--- tablo üstündeki tüm triggerları devredışı bırakır.

16 AFTER/FOR triggerlarında, triggerı devreye sokan olay olmuş kabul edilerek akış triggera bırakılır ve işlemler yapıldıktan sonra kontrollere aykırı bir durum varsa başa döner. INSTEAD OF triggerı ise istenilen kontrolleri başta yapar. Problem çıkarsa direk ROLLBACK edilir. INSTEAD OF triggerlarında ise, değişiklikler ana tabloya yansıtılmasa da INSERTED ve DELETED tablolarına kaydedilir. FOR triggerları INSERT/UPDATE/DELETE durumlarının her üçü için de veya her biri durumunda birden fazla da tanımlamaya imkan verirken; INSTEAD OF triggerları INSERT, UPDATE veya DELETE işlemleri için de tanımlanabilir fakat aynı işlem için başka bir INSTEAD OF triggerı tanımlanamaz.

17 Uygulamalar Yandaki resimde görülen örnek tabloyu oluşturunuz.
tbSiparis tablosuna bir kayıt girildiğinde ekrana «yeni bir sipariş gelmiştir.» şeklinde ekrana mesaj yazan trigger yazınız. tbSiparis tablosuna bir kayıt girildiğinde, bu kayıtın tüm bilgilerini «tbkargolistesi» isimli bir tabloya Insert eden bir trigger yazınız. Herhangi bir faturano’lu kayıt üzerinde adet değerini güncelleyen bir değişiklik olduğunda bu değişikliğe dair «şu faturanolu kayıt şu tarihte değiştirilmiştir.» şeklinde ayrı bir tabloya bilgi girişi yapan (log) trigger yazınız. tbSiparis tablosundan silinen herhangi bir kayıt olduğunda bu kaydı «silinensiparişler» isminde bir tabloya yazan bir trigger yazınız.

18 Araştırmalar INSTEAD Of Triggers DDL Triggers RECURSIVE Triggers
NESTED Triggers

19 Kaynaklar Yazılımcılar için SQL Server 2012 ve veritabanı Programlama, Y.Gözüdeli, Seçkin Yayınevi. Veritabanı Yönetim Sistemleri I, T.ÖZSEVEN, Murathan Yayınevi.


"SQL Server - Triggers." indir ppt

Benzer bir sunumlar


Google Reklamları