Tetikleyiciler (TRIGGER) Tetikleyiciler ne zaman kullanılırlar. Ardı Sıra Tetikleyiciler (After Triggers) Örnek

Benzer belgeler
SQL TRIGGERS (Tetikleyiciler)

EXISTS VE NOT EXISTS fonksiyonları

TRIGGER. Trigger lar, tablo üzerinde tanımlanabilen ve bu tablo üzerinde bir işlem gerçekleştiğinde tetiklenen programlama ögeleridir.

Bir çeşit prosedür. Ancak bu prosedür kendiliğinden çalışır. Çalışması için tabloya veri eklemek, veri silmek, veri değiştirmek yeterlidir.

Veri Tabanı ve Yönetimi

Güz Yarıyılı MT 487 Bilgisayarda Veri Yapıları Final Çalışma Soruları

VERİ TABANI ve YÖNETİMİ

TETİKLEYİCİ. Tetikleyici Ne Zaman Kullanılır? Çeşitli amaçlara uygun olarak tetikleyiciler kullanılabilir.

MT487_2005guz_final_cevaplar (cevaplar vurgulu ve koyu yazılmıştır)

1. Araçların tüm bilgilerini ve bağlı oldukları kiralama noktasının adres ve telefonunu içeren tam listesi:

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

Sayfa 1 / 8. Tabo yapıları

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

5 SQL- Yapısal Sorgulama Dili. Veritabanı 1

1. GİRİŞ 2. YENİ TABLO EKLEME

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

Öğr.Gör.Murat KEÇECĠOĞLU. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

SQL PROGRAMLAMA. Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı GO deyimidir.

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

Öğr.Gör.Murat KEÇECĠOĞLU 27 May. 28 May Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

«BM364» Veritabanı Uygulamaları

PostgreSQL ve PL/pgSQL

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

DML işlemleri. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı May Öğr. Gör. Murat KEÇECĠOĞLU

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

KULLANICI TANIMLI FONKSİYONLAR (Devam)

KULLANICI TANIMLI FONKSİYONLAR

PostgreSQL ve PL/pgSQL

KULLANICI TANIMLI FONKSİYONLAR (Devam)

Kullanıcı tanımlı fonksiyonlar SQL2000 ile gelen özelliklerden biridir. Fonksiyonlar tek bir değer veya tablo döndürmek için kullanılır.

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

BÖLÜM -6: VERİLERİ DEĞİŞTİRMEK

Mysql Veritabanı Komutları

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

Fonksiyonlar istenilen deger tipinde dönüs yapabilir. INT, VARCHAR deger döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.

Oracle da kullanılan veri tipleri:

Aşağıdaki tabloyu inceleyin. Yeni kayıt girme, var olan bir kaydı silme veya güncelleme işlemlerini bu tabloya göre yapacağız.

VERİ TABANI YÖNETİM SİSTEMLERİ II. 5. SQL PROGRAMLAMADA CURSOR (İMLEÇ) ve TRIGGERS (TETİKLEMELER)

BMB202. Veritabanı Yönetimi Ders 8. Stored Procedure (Saklı Yordamlar), Trigger (Tetikleyiciler), Transactions, Yetkilendirme (Authorization)

2- Total de 8000 byte yer tutup 4000 karakter olarak kullanabildiğimiz tip aşağıdakilerden hangisidir?

YAPISAL SORGULAMA DİLİ (SQL)

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

//bu ifadelerin ikisi de gerçekleşiyorsa havale işlemi gerçekleşmiştir fakat 1 tanesini çalışmazsa havale olmamıştır.

T.C GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ YÖNETİM BİLİŞİM SİSTEMLERİ ANA BİLİM DALI MS SQL KOMUTLARI VE MS SQL KOMUTLARI İLE İLGİLİ UYGULAMALAR

STORED PROCEDURE LER (Saklı Yordamlar)

Veritabanında Saklı Yordamlar: Bir Veritabanı Tasarımı ve Web Uygulaması

EBE-368 Veri Tabanı Yönetim Sistemleri İlişkisel Model (The Relational Model)

Veri Tabanı Programlamaya Giriş

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

«BM364» Veritabanı Uygulamaları

TEMEL SQL SORGU ÖRNEKLERİ. Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market adında bir veritabanı oluşturulur.

Veritabanında Saklı Yordamlar: Bir Veritabanı Tasarımı ve Web Uygulaması

VERİTABANI ve YÖNETİMİ

VERİ TABANI YÖNETİM SİSTEMİ 2

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

BİLİŞİM TEKNOLOJİSİNİN TEMELLERİ DERSİ

EROL AKGÜL

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

Cursor. Bir veri tipi olarak da ele alınabilen Transact-SQL Sunucu Cursor şu aşamalardan geçirilerek kullanılır.

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

1. MİCROSOFT SQL SERVER 2014'E GİRİŞ

MOBİL UYGULAMA GELİŞTİRME

BÖLÜM- 11: BÜYÜK VERİ KÜMELERİ

SQL Komutları (2) Uzm. Murat YAZICI

SQL Kod ile Tablo Oluşturma

SQL Stored Procedure

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

İNTERNET PROGRAMCILIĞI HAFTA. MYSQL ile VERİTABANI İŞLEMLERİ - 1. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Veritabanı Oluşturma, Silme

SQL'e Giriş 2. CREATE TABLE tabloadı (kolon isimleri ve veri türleri) (BOLUM_NO NUMBER, BOLUM_ADI CHAR(10));

SQL Server genel olarak iki tip veritanını yönetmek için kurulur.

1.adım : Sql serverda Stored procedure oluşturmamız gerekiyor. Şu adımları izliyoruz.

SUNGURLU MESLEK YÜKSEKOKULU 5. T-SQL-2

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

T-SQL NEDİR? Microsoft T-SQL Transact-SQL

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) SQL (Structured Query Language)

ACCESS PLATFORMUNDA SQL

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

VERİ TABANI ve YÖNETİMİ

BİLİŞİM TEKNOLOJİLERİ

VERİ TABANI YÖNETİM SİSTEMLERİ II. 4. SQL PROGRAMLAMADA PROCEDURE ve FUNCTION

TBİL UYGULAMA I DERSİ. Mobil Barkotlu Depo Programı Projesi PROJESİ Kurulum Rehberi

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

BAYİLERİMİZE ÖZEL. 13 Ağustos İlgili Modül/ler : Genel. İlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL

PostgreSQL Veritabanı Sunucusu. 8.2 neler getiriyor?

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

«BM364» Veritabanı Uygulamaları

Nesneler üzerinde değişiklik yapmak için kullanılır. Veri tabanındaki nesnelerin oluşturulabilmesi için CREATE komutu kullanılır.

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir.

Liquibase ile Veri Tabanı Değişiklik Yönetimi

Veri tabanı içinde bulunan tablolardakibazı sütunlarda bulunan bilgilerin, herkes tarafından görülmesi istenmeyebilir.

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

FIRAT ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BİLGİSAYAR SİSTEMLERİ LABORATUVARI- DENEY NO:3 CLIENT SERVER ORTAMINDA VERİTABANI KULLANIMI

VERİ TABANI YÖNETİM SİSTEMLERİ II. 3. SQL PROGRAMLAMA BLOKLARI ve AKIŞ DENETİMİ

1 - Adi A Harfi İle Biten Kişilerin Listesi İçin Hangisi Kullanılmalıdır? Select * From Kisiler Where Adi End A Select * From Kisiler Where Adi Like

Bölüm 7: Microsoft Transact - SQL

Transkript:

Tetikleyiciler (TRIGGER) Bir tetikleyici bir tabloya bağlı olarak bir takım işlemler yapan özel bir saklı yordamdır. Biz bu derste sadece Ardı Sıra Tetikleyici (After Trigger) ve Yerine Tetikleyici (Instead Of Triggers) adı verilen tetikleyicileri tanıtacağız. Tetikleyiciler ne zaman kullanılırlar Tetikleyicileri kullanmanın bir çok nedeni vardır. Bir tabloda bir değişiklik yapıldığında ayni anda bir çok değişik işlemin de yapılması gerekli olabilir. Belki de bu tabloda yapılan değişikliklerin veritabanı sorumlusuna bir e-mail atması istenebilir. Bu işlemler için tetikleyiciler kullanmak çoğu kez çok zarif çözümler üretmenizi sağlayabilir. Ardı Sıra Tetikleyiciler (After Triggers) Bir tabloya UPDATE, INSERT veya DELETE işlemi yapıldıktan sonra bir takım işlemlerin yapılması için kullanılan tetikleyicilere Ardı Sıra Tetikleyici denir. Bu tür tetikleyiciler pek çok değişik iş yapabilirler. Bir başka tabloya veri girişi yapmak veya tabloyu güncellemek, tablolar arasında uyumu sağlamak için bu tür tetikleyiciler çok uygundur. Örnek 1. Bu örnekte öncelikler üç tablo oluşturalım. Müşteriler, Kitaplar ve Satışlar CREATE TABLE Müşteriler ( MüşteriNo int IDENTITY (1, 1) NOT NULL, AD nvarchar (20), SOYAD nvarchar(20) ) CREATE TABLE Ürünler ( ÜrünNo int IDENTITY (1, 1) NOT NULL, ÜrünAD nvarchar (255), Stok int ) CREATE TABLE Satışlar ( FişNo int IDENTITY (1, 1) NOT NULL, MüşteriNo int, ÜrünNo int, Adet int, Tarih smalldatetime ) VALUES ('Yusuf','Ünlü') VALUES ('Orhan','Sönmez') VALUES ('Naime','Ekici')

VALUES ('Modern Cebir, Herstein, Academic Press',5) VALUES ('Analiz, Rudin, Van Nostrand',4) VALUES ('Geometri, Coxeter, North Holland',2) VALUES ('Şu Çılgın Türkler, Özakman',450) CREATE TRIGGER SatışGir_StokGüncelle ON Satışlar FOR INSERT DECLARE @Say int SELECT @SAY = COUNT(i.ÜrünNo) FROM Ürünler u INNER JOIN inserted i ON u.ürünno = i.ürünno WHERE (i.adet > u.stok) IF @Say >0 BEGIN ROLLBACK TRANSACTION RAISERROR ('Girilen ürünlerden biri stokdan fazla',16,1) END ELSE UPDATE Ürünler SET Stok = u.stok - i.adet FROM Ürünler u INNER JOIN inserted i ON u.ürünno = i.ürünno Burada inserted olarak adlandırılan tablo yeni bir kayıt girilmekte olan Satışlar tablosunda yeni kayıtın girildiği satırdan oluşan tablonun tetikleyicide kullanılan mantıksal adıdır. Tetikleyicinin ne yaptığı son derece açıktır. Eğer yeterli stok varsa satış yapıldıktan sonra satış adedini stoktan düşmektedir. Bunun için bir örnek verelim. SELECT * FROM Ürünler INSERT INTO Satışlar( MüşteriNo,ÜrünNo,Adet,Tarih) VALUES ( 1,2,1, '2.2.2005') SELECT * FROM Ürünler Stok kontrolü yapmayan bir tetikleyici daha basit yazılabilir 2. Bir DELETE tetikleyici yazalım

CREATE TRIGGER SatışSil_StokGüncelle ON Satışlar FOR DELETE UPDATE Ürünler SET Stok = p.stok + i.adet FROM Ürünler p JOIN deleted i ON p.ürünno = i.ürünno Bu tetikleyiciyi deneyelim SELECT * FROM Satışlar DELETE FROM WHERE FişNo = 2 Satışlar Burada deleted olarak adlandırılan tablo kayıt silinmekte olan Satışlar tablosunda silinen kayıttan oluşan tablonun tetikleyicide kullanılan mantıksal adıdır. Tetikleyici iptal edilen satış adedini stoka eklemektedir. 3. Bir UPDATE tetikleyici yazalım. Burada UPDATE işleminin sadece bir tek satır üzerinde yapıldığı varsayılmaktadır. CREATE TRIGGER SatışGüncelle_StokGüncelle ON Satışlar FOR UPDATE DECLARE @STOK int, @ÜrünNo int, @Eski_Adet int, @Yeni_Adet int SELECT @ÜrünNo = ÜrünNo, @Yeni_Adet = Adet FROM inserted SELECT @Eski_Adet = Adet FROM deleted SELECT @STOK = Stok FROM Ürünler IF @Stok + @Eski_Adet - @Yeni_Adet < 0 ROLLBACK TRANSACTION ELSE UPDATE Ürünler SET Stok = Stok + @Eski_Adet - @Yeni_Adet Burada deleted olarak adlandırılan tablo kayıt değiştirilmeden önce Satışlar tablosunda değiştirilmekte olan kayıttan oluşan tablonun tetikleyicide kullanılan mantıksal adıdır. inserted ise ayni satırın kayıt değiştirildikten sonra elde edilen satırdan oluşan tablonun tetikleyicide kullanılan mantıksal adıdır. Bunun nedeni aslında UPDATE bir DELETE ve INSERT işleminin ard arda uygulanması gibi düşünülmelidir. Yerine Tetikleyiciler( INSTEAD OF TRIGGER) Bir INSERT, UPDATE veya DELETE işlemi bir tabloya uygulandığında bu tablo üzerinde, sırasıyla bir Instead Of INSERT, Instead Of UPDATE veya Instead Of DELETE tetikleyici varsa bu işlem tablo üzerinde gerçekleşmez. Onun yerine tetikleyici içinde yazılı kodlar yapılır. Örnek:

CREATE TABLE DENEME ( N int IDENTITY (1, 1) NOT NULL, Ad varchar(32), SilmeGirişimi datetime) CREATE TRIGGER deltrig_deneme ON Deneme INSTEAD OF DELETE UPDATE Deneme SET SilmeGirişimi = GETDATE() WHERE N IN (SELECT N FROM DELETED) INSERT Deneme(Ad) values('yusuf') INSERT Deneme(Ad) values('orhan') INSERT Deneme(Ad) values('naime') DELETE Deneme WHERE N=1 DELETE Deneme WHERE N=2 Bir INSTEAD OF INSERT örneği verelim. CREATE TABLE DenemeTablo (BirincilAnahtar int IDENTITY(1,1), Renk nvarchar(10) NOT NULL, Kumaş nvarchar(10) NOT NULL, FormülleHesaplananKolon (Renk + Kumaş) ) CREATE VIEW DenemeTabloİçinSanalTablo SELECT BirincilAnahtar, Renk, Kumaş, FormülleHesaplananKolon FROM DenemeTablo CREATE TRIGGER YerineTetikleyici on DenemeTabloİçinSanalTablo INSTEAD OF INSERT BEGIN INSERT INTO DenemeTablo SELECT Renk, Kumaş FROM inserted END INSERT INTO DenemeTablo (Renk, Kumaş) VALUES ('Kırmızı', 'Keten') SELECT BirincilAnahtar, Renk, Kumaş, FormülleHesaplananKolon FROM DenemeTablo Şimdi bu tabloya hatalı bir giriş yapmaya çalışalım. Bu girişin hatalı olmasının nedeni, IDENTITY kolona bir değer girime girişimi ve formülle hesaplanan bir kolona giriş yapılmaya çalışılmasıdır.

INSERT INTO DenemeTablo VALUES (2, 'Pembe', 'İpek', 'Pembeİpek') Yukarıdaki hatalı giriş yerine şimdi yerine tetikleyicinin devreye girmesini sağlayan bir giriş yapalım. Bu tetikleyici DenemeTabloİçinSanalTablo için yazıldığından INSERT işlemini bu VIEW için yapmaya çalışalım. INSERT INTO DenemeTabloİçinSanalTablo (BirincilAnahtar, Renk, Kumaş, FormülleHesaplananKolon) VALUES (999, 'Mavi', 'Pamuk', 'XXXXXX') Şimdi bir hata olmadan giriş yapıldığını görelim. SELECT BirincilAnahtar, Renk, Kumaş, FormülleHesaplananKolon FROM DenemeTabloİçinSanalTablo