Merhaba,
Bazı durumlar olur ki veri çekmek istediğinizde, gelmesi istenen veri koşullara göre değişken davransın. Yani kod içerisinde yazdığımız if-else gibi davransın.
Ya da binlerce kayıt bulunan tablo dökümünde tabloda kayıtlara göre farklılık gösteren kayıtları ayrıştırma işlemini yapıyım isterseniz.
Ya da işte benim bahsedemediğim ama sizin " tam burada (sql içerisinde) bir if-else yazsam " dediğiniz anda işinizi görecek bir komut DECODE komutu.
if-else işlemini sql procedure veya sql fonksiyon içerisinde yazabiliriz elbette ama decode komutunu select işleminde veya where koşulu içerisinde her yerde kullanabiliriz.
Kısaca tanımı;
DECODE( [kontrolIfadesi] , [birinciKosul] , [birinciKosulDOGRUYSADonecekDeger] , [ikinciKosul] , [ikinciKosulDOGRUYSADonecekDeger] , [hicbirKosulDOGRUDEGILSEDonecekDeger] )
Yukarıdaki ifadenin türkçe meali şöyle ki;
Decode içerisine ilk parametre olarak kontrol edeceğin ifadeyi koy. Ardından ikinci parametre kontrol ifadesine "eşitse" kontrolünü yapacağın birinci koşul ifadesi, üçüncü parametre ise birinci koşul ifadesi ile kontrol ettiğin ifade eşitse dönecek olan değer. Sıralı şekilde önce koşul hemen ardından koşul sağlanıyorsa döndürülecek değer şeklinde eklenebilir. En sona öncesinde bir koşul konmadan yazılan ifade ise, eğer hiçbir koşul sağlanmazsa gösterilecek değer olacaktır.
Şöyle bir örnek üzerinden daha yakından inceleyelim;
SELECT
p.adi as ADI,
p.soyadi as SOYADI,
p.kimlik_numarasi as KIMLIK_NUMARASI,
DECODE( p.statu, 'M' , 'MEMUR' , 'I' , 'İŞÇİ' , 'S' , 'STAJYER' , 'E' , 'EMEKLİ' , 'TANIMLANMAMIŞ' ) as STATU
FROM personel p ;
Personel tablomuz olsun ve bu tabloda personellerin kayıtları tutulsun. Herbir personel için ise personelin statüsünü tuttuğumuzu varsaydığımız sütunumuz (alanımız) olsun. Bu alanda personellerin statü bilgileri için VARCHAR2(1) tipinde (şeklinde) tanımlanmış verileri tuttuğumuzu varsayalım. Böyle bir senaryo için çalıştırılacak yukarıdaki gibi bir sorguda decode işlemi yaptığımızda, herbir personelin statü alanında yer alan karaktere göre ilgili açıklamayı yazacaktır.
Veritabanında ;
OĞUZ HAN TURAN 11112222324 I
şeklinde olan bir kayıt
yukarıdaki sorgu çalıştırıldığında şöyle gelecektir.
OĞUZ HAN TURAN 11112222324 İŞÇİ
veya veritabanında;
OĞUZ HAN TURAN 11112222324 T
şeklinde olan bir kayıt
yukarıdaki gibi bir sorgu çalıştırıldığında
OĞUZ HAN TURAN 11112222324 TANIMLANMAMIŞ
şeklinde gelecektir. Çünkü decode ifadesi içerisinde p.statu alanının 'T' ifadesine eşit olduğunda gösterilecek ifadeye yönelik bir kontrol işlemi gerçekleştirilmemiştir. Bu yüzden en sonra hiçbir koşul ifadesi olmayan değer yazılmıştır.
Başka bir deyişle yukarıdaki SQL ifadesinin basitçe koda çevrilmiş hali şöyledir.
if( p.statu == 'M' )
System.out.println("MEMUR");
else if( p.statu == 'I' )
System.out.println("İŞÇİ");
else if( p.statu == 'S' )
System.out.println("STAJYER");
else if( p.statu == 'E' )
System.out.println("EMEKLİ");
else
System.out.println("TANIMLANMAMIŞ");
Umarım açıklayıcı olmuştur.
</HappyCoding>
Hiç yorum yok:
Yorum Gönder