SQL TRIGGERS (Tetikleyiciler)

Benzer belgeler
EXISTS VE NOT EXISTS fonksiyonları

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.

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

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

VERİ TABANI ve YÖNETİMİ

Veri Tabanı ve Yönetimi

SQL Stored Procedure

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

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

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

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

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

PostgreSQL ve PL/pgSQL

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

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

PostgreSQL ve PL/pgSQL

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

STORED PROCEDURE LER (Saklı Yordamlar)

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

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

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

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

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

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

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

VERİTABANI ve YÖNETİMİ

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

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

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

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

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

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

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.

«BM364» Veritabanı Uygulamaları

SORGULAR. Öğr.Gör.Volkan Altıntaş

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

SQL Komutları (2) Uzm. Murat YAZICI

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

VERİTABANI. SQL (Structured Query Language)

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

VERİTABANI Veritabanı Yönetimi

İngilizce'de Relational Database Management System (RDBMS) olarak ifade edilir.

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

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

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

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

SQL Kod ile Tablo Oluşturma

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

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.

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

Çok tablolu sorgulamalar

KULLANICI TANIMLI FONKSİYONLAR

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

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

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

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

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

Veri Tabanı Programlamaya Giriş

Veritabanı Tasarımı. Veritabanı Hareketleri

KULLANICI TANIMLI FONKSİYONLAR (Devam)

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

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

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

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

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

VERİ TABANI ve YÖNETİMİ

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

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

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

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

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.

YAPISAL SORGULAMA DİLİ (SQL)

BİLİŞİM TEKNOLOJİLERİ

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

DĐNAMĐK ve STATĐK SQL KULLANMANIN PERFORMANSA ETKĐSĐ

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

BİLİŞİM TEKNOLOJİLERİ

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

KULLANICI TANIMLI FONKSİYONLAR (Devam)

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

COMMIT: Oluşturulan transaction işlemi başarılı bir şekilde gerçekleştiğinde yapılan değişikliklerin veritabanına kalıcı olarak aktarılmasıdır.

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

«BM364» Veritabanı Uygulamaları

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

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

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

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

MOBİL UYGULAMA GELİŞTİRME

SORGULAR VE ÇEŞİTLERİ II

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

ACCESS PLATFORMUNDA SQL

T.C. MİLLÎ EĞİTİM BAKANLIĞI MEGEP (MESLEKÎ EĞİTİM VE ÖĞRETİM SİSTEMİNİN GÜÇLENDİRİLMESİ PROJESİ) BİLİŞİM TEKNOLOJİLERİ VERİTABANI YÖNETİMİ

Mysql Veritabanı Komutları

Oracle da kullanılan veri tipleri:

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

Sayfa 1 / 8. Tabo yapıları

Command Nesnelerini Kullanarak Tablolarda Değişiklik Yapmak:

SQL e Giriş. Uzm. Murat YAZICI

Transkript:

Trigger kelime anlamı olarak tetikleyici demektir. Trigger, SQL de bir sorgu çalıştırdığımızda, başka bir sorgunun çalışmasını sağlamak için yazılan koddur. Mesela bir tablodan kayıt sildiğimizde, başka bir tablodan onunla ilgili bir kaydın silinmesi için kullanabiliriz. Yada bir tabloya ekleme yaptığımızda başka bir tabloya da onunla ilgili olan bilgileri eklemek için kullanabiliriz. 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. 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.

Aşağıdaki şekilde verilmiş veritabanı için tetikleyici uygulaması yapalım. Ürünlerle ilgili bir sipariş geldiğinde yani sipariş tablosuna bir insert olduğunda sipariş edilen miktarı otomatik olarak urunler tablosundaki miktar alanından çıkaracak tetikleyiciyi yazalım

Sipariş tablosuna yeni bir kayıt girildiğinde (insert trigger), ürünler tablosundaki ilgili ürünün stok miktarından satış miktarı düşülecek. Tetikleyici sipariş tablosu için yazılacak. urunid si girilmiş sipariş edilen ürün için satış miktarı, urunler tablosundaki miktar alanından düşülecek.

Urunler tablosu Siparis tablosu

Insert için trigger kodu; Sipariş verildiğinde sipariş verilen miktarı stoktan düşecek insert trigger ı yazınız create trigger miktarguncelle on siparis for insert as begin declare @satis int declare @urunid tinyint select @satis=satismiktar,@urunid=urunid from inserted update urunler set miktar=miktar @satis where urunid=@urunid End insert into siparis(11,1,100) miktarguncelle çalışır

Trigger oluşturulduktan sonra, sipariş tablosuna yeni bir kayıt girilip, urunler tablosu listelendiğinde stoktaki miktarın satış miktarı kadar azaldığı görülmektedir. select * from urunler insert into siparis values(5,1,100) select * from urunler

create trigger sil on siparis for delete as begin declare @satir int select @satir=count(*) from deleted if(@satir>3) begin print cast(@satir as nvarchar(4))+' adet silme!!!' raiserror('fazla miktarda silme olmaz',16,1) rollback transaction end End Delete from urunler

Aşağıdaki tetikleyicileri istenen şekilde hazırlayıp test ediniz 1-Ürünler tablosuna kayıt girildiğinde eğer ürün miktarı 50 ve altı ise kategori alanını otomatik olarak sarf olarak atasın 2-Verilen bir sipariş için ödenecek tutarı hesaplattırıp yazdıracak bir tetikleyici yazınız. Tutar=bfiyat*satisMiktar 3-Sipariş miktarı 500 den büyük tutarlı ürünlerin tutarı hesaplanırken tutar üzerinden %10 indirim yapılarak tutar yazdırılsın. 4-Ürün tablosundan 1 nolu ürün miktarı 500 un altına indiğinde birim fiyatını yarıya indiren tetikleyiciyi yazınız 5-Sipariş edilen miktar stok miktarını aşıyorsa hata verdiren trigger ı yazınız 6-Sipariş listesinden silinen bir ürün için sipariş miktarı kadar değeri urunlerdeki miktara geri iade eden trigger ı yazınız. Birden fazla kayıt aynı anda silinemez

create trigger miktarguncellekontrol on siparis for insert as begin declare @satismiktar int declare @urunid tinyint declare @stokmiktar int select @satismiktar=satismiktar from siparis select @stokmiktar=miktar from urunler where urunid in(select urunid from inserted) if(@stokmiktar>@satismiktar) begin select @satismiktar=satismiktar,@urunid=urunid from inserted update urunler set miktar=miktar @satismiktar where urunid=@urunid end else begin rollback transaction raiserror('girilen sipariş miktarı fazla',16,1) end end

Test etmek için; insert into siparis values(6,4,10) HATA YOK!! insert into siparis values(7,4,100) HATA!!! Msg 50000, Level 16, State 1, Procedure miktarguncellekontrol, Line 17 girilen sipariş miktarı fazla

DELETE işlemi için Instead of TRIGGER örneği; Her hangi bir silme işlemi gerçekleşmeden önce durduruluyor!!! use urunler create trigger silinsteadof on siparis instead of delete as begin raiserror('silme olmaz',16,1) rollback transaction end delete from tabloadı

Trigger Alter Etmek: Trigger ı düzeltmek için ALTER TRIGGER komutu kullanılır. ALTER TRIGGER trigger_ismi ON tablo_ismi FOR INSERT AS RAISERROR ( hata!!!, 16, 10)

Trigger Drop Etmek: Trigger silmek için; DROP TRIGGER trigger_ismi Eğer trigger ın var olup olmadığını kontrol etmek istersek «sys.triggers» içinde trigger ınızın varlığını kontrol ettrirebilirsiniz. declare @isim nvarchar(20) set @isim='sipariskontrol1' if exists(select sys.triggers.name from sys.triggers where name=@isim) begin drop trigger sipariskontrol1 end else begin print @isim+' diye bir trigger yok!!' end

Sistemde tanımlı tüm triggerları listelemek declare @trigad nvarchar(50) declare @trigid int declare trigcrs cursor for select sys.triggers.name,sys.triggers.object_id from sys.triggers open trigcrs fetch next from trigcrs into @trigad,@trigid while(@@fetch_status=0) begin print 'Trigger ismi:'+@trigad+char(13)+'trigger id:'+cast(@trigid as nvarchar(20)) fetch next from trigcrs into @trigad,@trigid end close trigcrs deallocate trigcrs