AFTER INSERT TRIGGER

AFTER INSERT TRIGGER, insert işlemi yapıldıktan sonra Oracle bu tetikleyiciyi çalıştırır.

Oracle/PLSQL de After İnsert Trigger oluşturma:

CREATE [ OR REPLACE ] TRIGGER trigger_adi
AFTER INSERT
   ON tablo_adi
   [ FOR EACH ROW ]
DECLARE
   -- değişken tanımları
BEGIN
   -- trigger kodu
EXCEPTION
   WHEN ...
   -- exception handling
END;

Parametre ve Argümanlar;

OR REPLACE :Opsiyoneldir. Bu parametre ile, tetikleyici daha önceden mevcut ise güncellenir, mevcut değil ise oluşturulur. Aksi takdirde mevcut tetikleyici drop edilmelidir. Edilmez ise, aynı isimle birden fazla nesne oluşturulamayacağı için ORA-00955: name is already used by an existing object (ad var olan bir nesne tarafından kullanılıyor) hatası alınır.

trigger_adi : Oluşturulan tetikleyicinin adı.

AFTER INSERT : Tetikleyicinin insert işleminden sonra çalışacağını belirtir.

tablo_adi : Tetikleyicinin dinleyeceği tabloyu belirtir. Belirtilen tabloya insert kodu çalıştıktan sonra tetikleyici devreye girer ve kodda belirtilen işlemleri gerçekleştirir.

NOT:
AFTER INSERT tetikleyicisinde, eklenen kolonlar :NEW.KOLON_ADI şeklinde ifade edilir.

ÖRNEK:
tbl_oğrenci tablosuna kayıt eklendikten sonra, after insert tetikleyicisi ile tbl_okul tablosundaki kontenjan kolonunu 1 azaltalım.

Kullanacağımız örnek tablomuzu oluşturuyoruz;

CREATE TABLE tbl_ogrenci
( ogrencino number(5),
  adi varchar2(60),
  soyadi varchar2(60),
  ekleme_tarihi date,
  ekleyen_kullanici varchar2(50)
);
CREATE TABLE tbl_okul
( okul_adi varchar2(250),
  Adres varchar2(500),
  Kontenjan number
);

Okul tablomuza kayıt oluşturalım,

Insert into tbl_okul (okul_adi,adres,kontenjan) 
              values (‘PL/SQL Türk’, ‘www.plsqlturk.com’,5000);

AFTER INSERT trigger kodunu yazıyoruz

CREATE OR REPLACE TRIGGER after_insert_tbl_ogrenci
AFTER INSERT
   ON tbl_ogrenci
   FOR EACH ROW 
DECLARE
BEGIN
   -- Kontenjanımızı 1 eksiltelim
Update tbl_okul set kontenjan = kontenjan – 1 ;

EXCEPTION
 WHEN OTHERS THEN
Null; -- Kod bloğunda hata oluşursa hiçbir işlem yapmasın
END;

NVL, LNNVL, NVL2, NULLIF, COALESCE

İnsanın gerçek değerini söylesem, ben de yanarım, Dünya da!
Fakat ne yazık ki, insan değerini bilemedi, kendini ucuza sattı.
İnsan aslında çok değerli bir atlas kumaş iken, kendini hırkaya yama yaptı –Mevlana

Merhaba

SQL Kullanıcıları tarafından çok fazla kullanılmayan(nvl hariç); ama güzel işler yapan bu arkadaşlara bir göz atalım. Hepsini tek tek inceleyelim.

Örneklerle açıklayabilmek için; Öncelikle bir tablo oluşturup, içine kayıtlar atıyorum.

 

create table NullOrnekTable (
id  number, 
deger1 varchar2(100),
deger2 varchar2(100),
deger3 varchar2(100),
deger4 varchar2(100),
deger5 varchar2(100),
deger6 varchar2(100)
);


insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (1, 'Ocak',    'Ocak', 'Pazartesi',      null,   'Kış', 'Soğuk');
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (2, 'Şubat',   'Şuba', 'Salı',           null,   'Kış', 'Soğuk');
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (3, 'Mart',    'Mart', 'Çarşamba',       null,   'İlkbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (4, 'Nisan',   'Nisa', 'Perşembe',       null,   'İlkbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (5, 'Mayıs',   'Mayı', 'Cuma',           null,   'İlkbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (6, 'Haziran', 'Hazi', 'Cumartesi',      'Tatil', 'Yaz', 'Sıcak');
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (7, 'Temmuz',  'Temm', 'Pazar',          'Tatil', 'Yaz', 'Sıcak');
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (8, 'Ağustos', 'Ağus', 'Pazartesi',      null,   'Yaz', 'Sıcak');
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (9, 'Eylül',   'Eylü', 'Salı',           null,   'Sonbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (10, 'Ekim', 	'Ekim', 'Çarşamba',       null,   'Sonbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (11, 'Kasım',  'Kası', 'Perşembe',       null,   'Sonbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (12, 'Aralık', 'Aral', 'Cuma',           null,   'Kış', 'Soğuk');
commit;



select t.*,t.rowid from NullOrnekTable t ;

 

kayıtlarımız bu hale geldi şimdi bu güzel arkadaşları; en bilindik olan ağabeylerinden (NVL)’den başlayarak kısa kısa örneklerle tanıyalım.

-- Nvl(deger, 'yeni ifade')*****
-- deger null ise "yeni ifade"; degilse kendini yazacaktır
select deger3, Deger4, nvl(deger4, 'İş Günü') NvlDegeri from NullOrnekTable;

 

DEGER3 DEGER4 NVLDEGERI
1 Pazartesi İş Günü
2 Salı İş Günü
3 Çarşamba İş Günü
4 Perşembe İş Günü
5 Cuma İş Günü
6 Cumartesi Tatil Tatil
7 Pazar Tatil Tatil
8 Pazartesi İş Günü
9 Salı İş Günü
10 Çarşamba İş Günü
11 Perşembe İş Günü
12 Cuma İş Günü
--***************************************************************************

-- lnnvl( deger= 1 ) ***
-- degeri 1 olmayanları döndürür. "deger!= 1" den farkı Null olanlarda gelir.
ÖNEMLİ!!!
select * from NullOrnekTable t where lnnvl(deger6 = 'Soğuk') ;

 

ID DEGER6
3
4
5
6 Sıcak
7 Sıcak
8 Sıcak
9
10
11

 

--***************************************************************************

--nvl2(ilkdeger, 'Null Degilse', 'Null ise') **
-- verilen ilk deger null ise ikinci deger donecektir.
select Deger3,Deger4, nvl2(deger4, 'Tatil Günlerimiz','İşgünlerimiz') Nvl2Degeri from NullOrnekTable t ;

 

DEGER3 DEGER4 NVL2DEGERI
1 Pazartesi İşgünlerimiz
2 Salı İşgünlerimiz
3 Çarşamba İşgünlerimiz
4 Perşembe İşgünlerimiz
5 Cuma İşgünlerimiz
6 Cumartesi Tatil Tatil Günlerimiz
7 Pazar Tatil Tatil Günlerimiz
8 Pazartesi İşgünlerimiz
9 Salı İşgünlerimiz
10 Çarşamba İşgünlerimiz
11 Perşembe İşgünlerimiz
12 Cuma İşgünlerimiz

 

--***************************************************************************

-- NullIf(ilkdeger, ikincideger) ***
-- iki deger esitse null; degilse ilk deger doner 
select deger1, deger2, nullif(deger1, deger2) NullIfDegeri from NullOrnekTable t;

 

DEGER1 DEGER2 NULLIFDEGERI
1 Ocak Ocak
2 Şubat Şuba Şubat
3 Mart Mart
4 Nisan Nisa Nisan
5 Mayıs Mayı Mayıs
6 Haziran Hazi Haziran
7 Temmuz Temm Temmuz
8 Ağustos Ağus Ağustos
9 Eylül Eylü Eylül
10 Ekim Ekim
11 Kasım Kası Kasım
12 Aralık Aral Aralık

 

--***************************************************************************

-- coalesce(ilkdeger, 'Null ise', 'Null ise', 'Null ise', 'Null ise' ...)
-- n paremetre alır ve ilk deger null ise, ikincisini; o da null ise , hep bir sonraki şeklinde gider....
-- bu örnekte en son deger3'te kesilmiştir. çünkü o kolonun tum alanları doludur.
select t.*, coalesce(deger6,deger4,deger3,deger2,deger1) Degeri  from NullOrnekTable t;

 

ID DEGER3 DEGER4 DEGER5 DEGER6 DEGERI
1 Pazartesi Kış Soğuk Soğuk
2 Salı Kış Soğuk Soğuk
3 Çarşamba İlkbahar Çarşamba
4 Perşembe İlkbahar Perşembe
5 Cuma İlkbahar Cuma
6 Cumartesi Tatil Yaz Sıcak Sıcak
7 Pazar Tatil Yaz Sıcak Sıcak
8 Pazartesi Yaz Sıcak Sıcak
9 Salı Sonbahar Salı
10 Çarşamba Sonbahar Çarşamba
11 Perşembe Sonbahar Perşembe
12 Cuma Kış Soğuk Soğuk

 

 

Bu şekilde nvl ve nvl’e benzer diğer özellikleri incelemiş olduk.

sql scriptini sayfanın başına ekledim. bu sayede ister bu örneklerle; isterseniz de kendi oluşturduğunuz tablolarda bunları deneyebilir; projelerinizde kullanabilirsiniz.