SQL Server - Triggers.

Slides:



Advertisements
Benzer bir sunumlar
SQL - Structured Query Language
Advertisements

Stored Procedure Öğr.Gör.Metin Akbulut.
Tablo oluşturma İlk olarak tabloları oluşturmamız gerekli..
SQL’e Giriş.
SQL de Değişken Tanımlama
SQL Komutlar 5 Sibel SOMYÜREK.
VERİ TABANI ve YÖNETİMİ
Veri Tabanı Yönetim Sistemleri
Veritabanı Yönetim Sistemleri Hızlı ve Kısa Giriş
VERİ TABANI ve YÖNETİMİ
Transaction.
VeriTabanı Uygulama. Tabloları yaratmak için MySQL komutları.
Tetikleyici. Nedir? Bir tablo üzerinde Ekleme silme ve güncellemeye bağlı olarak tetiklenip çalışan SQL kodlarıdır. Genel amacı veri bütünlüğünü korumaktır.
SQL (STRUCTURED QUERY LANGUAGE)
MYSQL 4. HAFTA. mySQL veri türleri INTTamsayı: 'den kadar değişen diziye "signed" (işaretli), 0'dan 'e kadar değişenine.
VIEW (BAKIŞ) OLUŞTURMA
ÖRNEKLER. musteri Id adi soyadi mus_satis Id barkod adet Urunlar barkod urun_adi kodu fiyati Stok_hareket tarih barkod gelen giden.
SQL Dili ve MySQL Komutları
SQL de Değişken Tanımlama
Iletisim Icin : Blog : E - Mail :
VeriTabanı Uygulama.
SQL SERVER STORED PROCEDURE
SQL Komutları (2) Uzm. Murat YAZICI.
RAISE RECORD/CURSOR TRIGGER
Bilgisayar Mühendisliği Bölümü
SQL’ e Giriş Uzm. Murat YAZICI.
Bilgisayar Mühendisliği Bölümü
Update UPDATE tablo_ismi SET sutun1=‘deger1’ WHERE sutun=deger.
ADRESİNDEN ÖRNEK VERİ TABANLARINI İNDİRİNİZ
T-SQL 3.K ONU Tablo Tipi Değişkenler. T ABLO TIPI DEĞIŞKENLER KULLANMAK T-SQL de dizi tanımlama nasıl yapılır? Bu sorunun cevabı olarak tablo tipi değişkenleri.
Yeni Veritabanı Oluşturma
Veri Tabanı Yönetimi Dersi 8. Laboratuvarı Arş. Gör. Pınar CİHAN.
S ORGU / DML / DDL KOMUTLARı İbrahim Onur Sığırcı.
PRODECURE, TRIGGER, INDEX, BACKUP
View View’ler select ifadesi ile tanımlanmış sanal tablolardır. Temel amacı base tabloların içerisinden veri kümesi getirip ortaya çıkan sonucu sanal.
Veri Tabanı Yönetim Sistemleri 2 Ders 7 Paket ve Tetikleyiciler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü.
 Stored Procedure kısaca SQL sorgularını isteğimize göre hazırlayıp kullanıma hazır veri tabanı nesnesine çeviren bir araçtır.  Stored Procedure, Türkçeye.
BÖLÜM 9 VERİ TABANI NESNELERİ.
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Öğretim Görevlisi Alper Talha Karadeniz Veri Tabanı 2
Veri Tabanı Yönetimi Dersi 1. Laboratuvarı
Bilgisayar Mühendisliği Bölümü
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Veri Tabanı Yönetimi Dersi 8. Laboratuvarı
VIEW lerle çalışmak 11.BÖLÜM.
Transaction ve Örnekler
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
TETİKLEYİCİ ( Trigger)
Tablo Tipi Değişkenler
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
TETİKLEYİCİLER ve HATA KONTROLÜ
14.DERS Örnekler, Sorular BUKET DOĞAN.
SQL SERVER STORED PROCEDURE
VERİ TABANI SQL (STRUCTURED QUERY LANGUAGE) SAVAŞ TUNÇER.
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Öğretim Görevlisi Alper Talha Karadeniz Veri Tabanı 1
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
DML ile veri ekleme, silme ve değiştirme
Sorgu / dml / ddl komutları
RAISE RECORD/CURSOR TRIGGER
SQL (STRUCTURED QUERY LANGUAGE)
Stored Procedure Öğr.Gör.Metin Akbulut.
SQL Server - Stored Procedures
SQL Server - Views.
VERİTABANI YÖNETİM SİSTEMLERİ 6-SQL Server-4-DML
VERİTABANI YÖNETİM SİSTEMLERİ 6-SQL Server-3-DDL
Transaction.
Sunum transkripti:

SQL Server - Triggers

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.

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.

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.

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

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.

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.

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.

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

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

Sipariş tablosundan bir kayıt silen ve silinen kayıt ile ilgili ekrana mesaj yazan trigger. CREATE TRIGGER trSiparisSil ON tbSiparis FOR DELETE AS DECLARE @sipno int SELECT @sipno=deleted.faturano FROM deleted PRINT cast(@sipno 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.

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

Ü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

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.

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.

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.

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

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.