Change Font Size

Change Screens

Change Profile

Change Layouts

Change Direction

Change Menu Styles

Cpanel

Duyurular

SAP Türkiye’ye yeni Pazarlama Müdürü

Ericcson Türkiye’de Pazarlama ve Strateji Müdürü  olarak görev yapan Erdem Aksakal, SAP Türkiye’nin yeni Pazarlama Müdürü oldu. Dünyanın en büyük kurumsal yazılım firmalarından SAP, Türkiye kadrosunu genişletmeye devam ediyor. SAP…...
Devamını Oku..
Salı, 14 Aralık 2010 13:47 in Duyrular

IBM'den çevre dostu veritabanı sistemi

IBM'den çevre dostu veritabanı sistemi IBM’in yeni DB2 veritabanı sürümü, veri saklama altyapılarından kaynaklanan karbon salınımını %75’e varan oranda azaltarak, küresel ısınmayla savaşıyor. IBM, yeni DB2 veritabanında yüksek ölçekli sıkıştırma…...
Devamını Oku..
Salı, 14 Aralık 2010 10:01 in Duyrular

Avea BT Sistemleri Uygulama Geliştirme Direktörü Cahit Terzioğlu

Merhaba, ETL süreçlerini ve faydalarını iyi analiz edebileceğimiz bir yazı paylaşıyoruz.Bunun için Avea BT Sistemleri Direktörü Cahit Beyle roportajdan bir bölüm yayınlayalım. Avea BT Sistemleri Uygulama Geliştirme Direktörü Cahit Terzioğlu…...
Devamını Oku..
Salı, 14 Aralık 2010 09:32 in Duyrular

Genel Duyuru

Merhaba  Arkadaşlar, Sitemiz güncellenmekte ve sizden gelen istekler doğrultusunda her gün yeni bir şeyler eklenmektedir. Bundan dolayı sitemize Forum, Video bölümlerini ekledik. Modüllerimizi daha da geliştiriyor olacağız. Sitemizi bloglarınızda link…...
Devamını Oku..
Salı, 14 Aralık 2010 09:10 in Duyrular

Yapı Kredi Bankası DataWarehouse Uygulaması

      "YKB Oracle 8i üzerinde geliştirdiği DataWarehouse uygulamasını yedi hafta içerisinde Sybase IQ ya taşıyarak, on aylık geri ödeme süresi ile yatırım geri dönüş maliyetinde %154 kazanç sağlamış…...
Devamını Oku..
Pazar, 12 Aralık 2010 20:34 in Duyrular

En Çok Okunanlar


Data Dictionary İstatistiğinin Alınması on 24 Haziran 2010, 00.00 by Yusuf Arslan in Oracle
Data Dictionary İstatistiğinin Alınması
Bu yazımda Oracle Database 10g ‘yle birlikte kullanıma sununlan cost-based optimizer (COB) hakkında işinize yarayacak bazı bilgiler vermek istiyorum. Cost-based optimizer uygulamasının asli görevi SYS ve SYSTEM ş
Veri, Veritabanı, Başarılı Veritabanı Uygulamaları İçin Dört Öneri
Hasan Tonguç Yılmaz bey’in Turkcell bloğunda yeralan yazılarını izniyle paylaşıyor olacağız.Öncelikle tanımayanlar için Tonguç Yılmaz kimdir kendi yazılarından tanıyalım.    Liseyi Mu�
Oracle Database 11g Bileşenleri Ve Mimarisi-1
Oracle Database 11g Bileşenleri Ve Mimarisi-1 Bu makalede Oracle Database 11g (Oracle 11g) veritabanı yönetimini öğrenmeye başlayacağız. Makalenin hazırlanış amacı Oracle 11g Administration I OCA sertifika
Oracle 11g BI ile Harita Üzerinde Rapor Oluşturma(Integratıon Mapviews)
BI EE 11 g’nin en büyük özelliklerinden biri MapViewer’dır.  Bu özellik , haritalara yetenek ve görsellik katarak raporlar oluşturmamızı sağlamaktadır.Örneğin dünya çapında bir haritada ülke b
Veriambarı Yazılım Geliştirme Sürecinde Test on 14 Aralık 2010, 09.47 by Yusuf Arslan in Oracle
Veriambarı Yazılım Geliştirme Sürecinde Test
Veriambarı bir organizasyonun elektronik olarak saklanan datasının deposudur.Veri ambarları raporlama ve analizi kolaylaştırmak için dizayn edilmişlerdir. Veriambarları analiz ve ilişkili verilerin sorgulanabildi
Perşembe, 28 Ekim 2010 21:17

Trigger Kullanımı

Yazan&Gönderen  Yusuf Arslan
Bu Öğeyi Derecelendir
(0 Oylar)

Veritabanında yer alan TABLO ve bu tabloya ait kayıtlar üzerinde INSERT, UPDATE ve DELETE komutlarının işlemesi öncesinde veya sonrasında devreye giren SQL komutlar dizine TRIGGER denir.

 

TRIGGER kelime anlamı olarak “Tetikleme” şeklindedir. Veritabanında yer alan tablolar üzerinde sadece kayıt ekleme, değiştirme ve silme işlemleri sırasında çalışacak olan SQL komutları topluluğudur.

 

INSERT, UPDATE ve DELETE komutu veritabanına gönderildiği zaman sunucu üzerinde yaratılmış olan trigger’lar ya işlemin öncesinde veya işlemin sonrasında çalışacaklardır.

 

 

TRIGGER’ların kullanım amaçları ;

 

Ø Tablolar üzerindeki işlemlerin denetim ve kontrol altında tutulmasına yönelik,

Ø Tabloların alanlarına verilebilecek değerlerin kontrol edilmesi,

Ø Tablolar arasındaki ilişkilendirmelerin denetlenmesi,

 

şeklindedir. Trigger’lar sunucu üzerinde çalışacakları için yönetim ve değişiklik yapılması kolaydır. Böylece veritabanında yer alan tabloların alanlarında yer alacak değerlerin son bir kez denetlenmesi mümkün olmaktadır. Programlar tarafından kontrol edilmekle beraber özellikle çeşitli yerlerden tablolara işlem yapılması mümkün olduğundan kritik kontrollerin, denetlemelerin bu triggerlar üzerinde yapılması önerilmektedir.

 

Sunucuya gönderilen INSERT, UPDATE veya DELETE komutundan ÖNCE ve/veya SONRA trigger devreye girecektir. Bu esnada tablo üzerinde değişiklikler kontrol edilir ve COMMIT komutuna kadar bu işlemler diğer kullanıcılara yansıtılmaz.

 

Trigger içersinde yer alacak kontrollerin, denetimlerin kısacası işlemlerin her kayıt için yapılacağının bilinmesi lazımdır. Gereksiz hiçbir işlemin özellikle kontrollerin trigger içersinde yer almamasına dikkat edilmelidir. Çünkü her kayıt eklemede veya değiştirmede veya silmede trigger devreye girecek ve kontrolleri yapacaktır. Bu da sistemin performansını etkileyecektir. Genel olarak kullanıcıların işlem yapma zamanlarını etkileyeceğinden özellikle üzerinde çok INSERT, UPDATE ve DELETE işlemlerinin sıkça yapıldığı tablolarda etki komutları içeren trigger’lar kullanılmasına dikkat edilmelidir.

Trigger yaratma komutu aşağıdaki gibidir.

 

CREATE or REPLACE TRIGGER trigger_adi

 BEFORE INSERT OR DELETE OR UPDATE ON tablo_adi

 FOR EACH ROW

  BEGIN

    IF INSERTING THEN

        ............

    END IF;

    IF DELETING THEN

        ............

    END IF;

    IF UPDATING('alan_adi') THEN

        ............

    IF UPDATING THEN

        ............

    END IF;

  END;

 

Veritabanında herşey bir obje olduğundan ve bu objeler SYSTEM altında ilgili tablolar içerisinde tutulduğundan dolayı yaratılacak her trigger’a biri isim verilecektir. Trigger isimlendirilmesinde de anlaşılır, kolayca çözülebilir notasyonların kullanılması önerilmektedir. (Trg_biud_tablo_adi veya Trg_aiud_tablo_adi şeklinde...)

 

Burada CREATE komutuyla birlikte aynı zamanda REPLACE seçeneği de kullanılmıştır. Böylece ileride trigger üzerinde değişiklik yapılmak istendiği zaman var olan trigger değiştirilmiş olacaktır.

 

BEFORE INSERT or UPDATE or DELETE şeklindeki ifade ile bu trigger ; INSERT, UPDATE veya DELETE komutlarından ÖNCE çalışacaktır.

 

AFTER INSERT or UPDATE or DELETE şeklindeki ifade ile bu trigger ; INSERT, UPDATE veya DELETE komutlarından SONRA çalışacaktır.

 

ON tablo_adi ifadesi ile bu trigger’ın hangi tabloya ait olduğu belirtilmektedir.

 

FOR EACH ROW ifadesi ile bu trigger içindeki komutlar tabloda ki tüm kayıtlar için çalışacak anlamındadır.

 

IF INSERTING ifadesi ile bu trigger içinde sadece tabloya kayıt ekleme esnasında devreye girecek SQL ifadeleri yer alacaktır.

IF DELETING ifadesi ile bu trigger içinde sadece tablodan kayıt silinmesi esnasında devreye girecek SQL ifadeleri yer alacaktır.

IF UPDATING ifadesi ile bu trigger içinde sadece tabloda ki kayıtların değiştirilmesi esnasında devreye girecek SQL ifadeleri yer alacaktır.

IF UPDATING(‘alan_adi’) ifadesi ile bu trigger içinde sadece tablonun bir alanında değişiklik yapıldığında devreye girecek SQL ifadeleri yer alacaktır.

Görüldüğü üzere bir trigger içinde aynı anda tüm işlemlerin kontrolü ÖNCE’den (BEFORE) sağlanmış olacaktır. Aynı şekilde bu kontroller veya diğer tablolara etkileri SONRA’da (AFTER) olabilir.

 

Ø Trigger’lar içinde kullanılacak SQL komutlarının 60 satırı geçmemesi önerilmektedir.

 

Ø Tablo üzerindeki işlemlerin kontrolü sırasında tablo üzerinde başka bir işlemin (Insert, Update, Delete) devreye girmemesine dikkat edilmelidir. Bu takdirde aynı trigger devreye gireceğinden işlemler başarısız olur ve trigger hatası verilir.

 

Ø Trigger’ların kolayca yönetilmesi için çoğunlukla INSERT, UPDATE ve DELETE işlemleri için ayrı ayrı trigger’lar yazılması önerilir. Böylece bir tabloya ait en fazla 6 adet trigger olabilir.

 

Trigger komutu içinde kullanılan FOR EACH ROW ifadesi eğer kullanılmaz ise trigger içersinde tüm kayıtlar için değil, tablo genelinde kontroller yapılacak anlamındadır.

 

CREATE TRIGGER trg_biud_emp

    BEFORE DELETE OR INSERT OR UPDATE ON emp 

    DECLARE 

        kaysay INTEGER; 

    BEGIN 

        /* Cumartesi veya Pazar Kontrolü */ 

        IF (TO_CHAR(SYSDATE,'DY') = 'CMT' OR TO_CHAR(SYSDATE, 'DY') = 'PAZ') 

         THEN raise_application_error( -20501, 

       'Tatil günlerinde tablo üzerinde değişiklik yapılamaz'); 

        END IF; 

       /* Resmi tatillerin kontrolü */ 

        SELECT COUNT(*) 

         INTO dummy 

          FROM tatil_gunleri WHERE gun = TRUNC(SYSDATE); 

        IF dummy > 0 

         THEN raise_application_error( -20501, 

          'Resmi Tatil günlerinde tabloda değişiklik yapılamaz'); 

        END IF; 

        /* 8:00 ve 18:00 kontrolü */ 

        IF (TO_CHAR(SYSDATE, 'HH24') < 8 OR  TO_CHAR(SYSDATE, 'HH24') >= 18) 

          THEN raise_application_error( -20502, 

       'Çalışma saatleri dışında tabloda işlem yapılamaz'); 

        END IF; 

      END; 

Yukarıda ki örnek trigger, EMP tablosu üzerinde INSERT, UPDATE ve DELETE işlemlerinden önce çalışacaktır. Ancak her kayıt için değil tablo genelinde devrededir.

 

Trigger içinde değişken kullanıldığından bu değişken adı ve tipi DECLARE satırında gösterilmiştir.

 

Eğer trigger içinde ki kontroller geçersiz sonuç verirse RAISE_APPLICATION_TRIGGER komutu ile hata mesajı kullanıcıya verilecek ve trigger’dan çıkılmış olacaktır. Diğer satırlar çalışmayacaktır.

 

Eğer bir trigger içinde SELECT ifadesi sonucunda bir değer ataması yapılacaksa bu SELECT .. INTO ifadesinin kullanılmasıyla olacaktır. Burada  ;

SELECT COUNT(*)   

  INTO kaysay

  FROM tatil_gunleri

 WHERE gun = TRUNC(SYSDATE); 

 

DECLARE ifadesi ile tam sayı olarak tanımlanmış olan KAYSAY değişkenine, tatil_gunleri dosyasında ki GUN alanı ile işlem tarihi eşit olan kayıt sayıları COUNT(*) komutuyla bulunmuş ve INTO ifadesi ile değeri atanmıştır.

 

TRIGGER’lar veritabanında yaratıldıktan veya üzerinde değişiklikler yapıldıktan sonra derlenmeleri gerekmektedir. Eğer bir trigger içersinde yer alan bir tablo DROP edilmişse bu trigger geçersiz duruma düşecek ve o komut satırı çalıştığında hata vererek çalışması kesilecektir. Bunun için özellikle veritabanı yöneticilerinin sistem içersinde yer alan tabloları ve ilgili triggerları sürekli kontrol altında tutmaları gerekmektedir.

 

Trigger içersinde tabloda kullanılan alanların YENI (NEW) ve ESKI (OLD) değerleri aynı anda kullanılmaktadır.

 

Ø INSERT ifadesi sırasında alanların :NEW değeri bulunur. Tabloya yeni bir kayıt ilave edildiğinden alanların ilk değerleri yenidir ve :NEW olarak kullanılır. Alanın eski değeri null dur.

Ø DELETE ifadesi sırasında alanların :OLD değeri bulunur. Tabloda var olan bir kayıt silindiğinde alanların eski değerleri (:OLD) mevcuttur, yeni değeri null dur.

Ø UPDATE ifadesi sırasında alanların hem :NEW hem de :OLD değeri bulunur. Tabloda kayıtlarda üzerindeki alanlarda değişiklik yapıldığından alanın eski (İOLD) ve yeni (:NEW) değerleri mevcuttur.

 

Ancak alanların :NEW ve :OLD değerleri BEFORE TRIGGER işleminde geçerli olmaktadır çünkü AFTER TRIGGER’da tablodaki değişiklikler yapıldığından alanın yeni değerini kullanacaktır.

 

Trigger’larda BEFORE seçeneği daha çok kullanılmaktadır. Çünkü tabloya etki edecek değişikliklerin yapılmadan önce kontrol edilmesi gerek şarttır. AFTER seçeneği ise bir tablonun değişiminden sonra etkilemesi gereken başka bir tablolar varsa onların üzerinde işlem yapılmasını sağlayacaktır.

 

Bir trigger içersinde, veritabanında yaratılmış olan bir PROCEDURE veya FUNCTION çağrılması mümkündür. Özellikle tekrar eden durumlarda, SQL satır sayısının fazla olduğu durumlarda kullanılabilir.

 

Bir tablo üzerinde bir seferinde çok sayıda kayıt üzerinde işlem yapılmak istendiği durumlarda veya girilmiş olan kayıtların tekrar düzenlemesi durumlarında, veritabanı yöneticisi trigger’ların çalışmasını geçici olarak durdurabilir. İşlemlerden sonra tekrar trigger’ı aktif edecektir. Bu işlemlerin, veritabanında kimsenin çalışmayacağı zamanda olması mutlak şarttır. Aksi takdirde, tabloların ve alanların bilgi girişleri güvenli olmayacak ve tutarsız değerler olabilecektir.

 

Trigger’ların çalışmasını geçici olarak durduran komut ALTER TRIGGER’dır.

 

 

Son Düzenleme Cuma, 29 Ekim 2010 00:09
Yusuf Arslan

Yusuf Arslan

Oracle Open Source

1985 Tokat/Reşadiye doğumluyum.İlk-orta-lise hayatını Amasya/Suluova ilçesinde geçirdim.Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerime Oracle,SAP alanlarında danışmanlık vermek üzere devam etmekteyim. Kullandığım,bildiğim teknolojiler ve diller; SAP BO Oracle BI Applications Oracle Data Mining Oracle BI Reports(http://www.iski.gov.tr/web/statik.aspx?KID=1000717) Oracle Data Integrator Oracle BI Publisher(XML Publisher) Oracle Database 10g Oracle Mapviewer PL/SQL,Java,Oracle JDeveloper,Oracle Forms-Reports,C# Data warehouse process optimization Database system implementation Using encoding for security systems Software development, test and deployment Presentation and communication skills Bu adreslerden de bana ulaşabilirsiniz, [email protected] https://datawarehouse.gen.tr/ http://www.arslanyusuf.blogspot.com/ http://yusufarslaneng.blogspot.com/ http://twitter.com/yusars http://tr.linkedin.com/pub/yusuf-arslan/27/35b/57b

Website: arslanyusuf.blogspot.com/ E-posta: Bu e-Posta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir

3 Yorumlar

  • Yorum Bağlantısı HatemasuPerşembe, 28 Ekim 2010 23:09 Gönderen Hatemasu

    Yazı çok iyi anlatım için teşekkürler...

  • Yorum Bağlantısı erkam ölmezPerşembe, 09 Aralık 2010 08:05 Gönderen erkam ölmez

    Oldukça faydalı bir yazı, sağolun.

  • Yorum Bağlantısı Yusuf ArslanPerşembe, 09 Aralık 2010 13:36 Gönderen Yusuf Arslan

    Teşekkürler,diğer makalelerimizdede yorumlarınızı bekliyoruz

Yorum yaz

Make sure you enter the (*) required information where indicated.
Basic HTML code is allowed.

About me

Sakarya Üniversitesi Bilgisayar Mühendisligini bitirdikten sonra kariyerime özel bir sirkette Danisman olarak devam etmekteyim.

Datawarehouse sistemlerin ve mimarilerin , dwh'a bakis açisini incelemek ve küçükte olsa bunlar hakkinda bilgi vermek amaciyla bu siteyi kurduk.Bunun yani sira diger sistemlere de dokunduk ve Türkçe makaleler paylastik.

Yazarlarimiz; Muhammet Ali Yurtçiçek, Ercan Yazgan, Samet Aslan,Ali Yildiz,Emin Sayan,Ömer Faruk Gül,Mustafa Aksoy,Burak Kutbay'dir.

 

Son Yazılar

Hangi Yazılım Dilini Kullanıyorsunuz








Sonuçlar
You are here