Oracle Decode Kullanımı | Oracle SQL Decode

Oracle Decode Kullanımı | Oracle SQL Decode

Oracle Decode Kullanımı başlıklı bu yazımda Select sorgularında if-then-else yapısını nasıl kullanabildiğimizi göreceğiz. PLSQL Decode Fonksiyonuna bir alternatif olan PLSQL Case When Kullanımı başlıklı Yazımı inceleyebilirsiniz.


PLSQL if-then-else yapıları için TIKLAYINIZ.


SQL Decode Kullanımı bize her programlama dilinde bulunan IF-THEN-ELSE fonksiyonelliğini kazandırır. Oracle decode fonksiyonunun syntaxı;

DECODE( expression , search , result [, search , result]... [, default] )%MINIFYHTML0f93511b940dd9c1ba7e18f45a0de2ed6%%MINIFYHTML0f93511b940dd9c1ba7e18f45a0de2ed7%

şeklindedir. Türkçesi ise [] parantezleri içerisinde yazan ifadeleri ister kullanın ister kullanmayın, isterseniz de defalarca kullanın anlamı taşır. Decode Kullanımı için kendi ifademizle yazmak isteseydik eğer sanırım şöyle olurdu 🙂 Bunu bir sql select sorgusunda göstereyim.

Select ad,soyad,
DECODE(karsilastirilacak_ifade  , eğer_buysa  , sonuç_bu [, eğer_buysa, sonuç_bu]... [, hiçbiri_Değilse_Sonuc_bu] ) from tablo1;

Oracle Decode Kullanımı ile gördüğümüz gibi SQL sorguları içerisinde sınama yapabiliyoruz. Defalarca ‘eğer_buysa, sonuç_bu‘ yazabiliyoruz. Maksimum 255 adet bu şekilde şart ifadesi çifti yazabiliriz.

O zaman biraz daha ayrıntıya inelim. 🙂

 

Oracle Decode Fonksiyonu Dikkat Edilmesi Gerekenler

Peki decode fonksiyonu bize hangi tip veri dönecek ? Ilk bulunan sonuç decode fonksiyonunun dönüş tipi olacaktır.
Eğer ilk sonucu NULL olarak girersek Decode fonksiyonu bize varchar2 tipinde dönecektir.
Eğer ilk sonuç CHAR tipinde ise, decode fonksiyonu bize varchar2 tipinde dönecektir.
Eğer hiçbir eşleşme yoksa “hiçbiri_Değilse_Sonuc_bu” dönecektir.
Eğer hiçbir eşleşme yoksa ve “default” değer yani “hiçbirideğilsesonuç_bu” alanı boş bırakılmışsa sonuç NULL dönecektir.

 

Örnek:

select decode(instr('MerhabaDünya','a',1,2),7, 'Evet 2. a karakteri 7. sırada','Hayır 7. harf a değil','Ne bileyim ben') from dual;

Instr fonksiyonu kullanımı için

Bir örnek daha paylaşalım. Örnek:

select decode(
decode(length('Hayırlıİşler'),14,'14 karakter uzunluğunda',13,
'13 karakter uzunluğunda',12,'12 karakter uzunluğunda',
'12,13,14 karakter uzunluklarında değil'),'12 karakter uzunluğunda', 'evet 12 karakter uzunluğunda','hayır 12 karakter uzunluğunda değil'
) from dual%MINIFYHTML0f93511b940dd9c1ba7e18f45a0de2ed8%%MINIFYHTML0f93511b940dd9c1ba7e18f45a0de2ed9%

Stringin uzunluğunun 12 karakter uzunluğunda mı diye kontrol ediyoruz. Evet saçma bir örnek ancak burada önemli olan Decode içerisinde yine bir Decode fonksiyonunu kullanabiliyor olmamız. Bu örneği anlamanız size bu fonksiyonu öğretecektir diye düşünüyorum. 🙂

 

SIGN fonksiyonu ile Oracle Decode Fonksiyonu kullanımı

SIGN fonksiyonu bir numerik değerin negatif mi, 0 (sıfır) mı yoksa Pozitif mi olduğunu bize döndürür. Negatif ise “-1”  sıfır ise  “0”  pozitif ise “1” değeri döner.

Bunu Oracle Decode Kullanımı ile öğrendiğimiz şekilde SIGN Fonksiyonu ile kullanmak istersek nasıl yaparız? Üstelik iki tarihi kıyaslayıp bunu başaralım. Senaryomuz ise doğum günü tarihimizin geçip geçmediğini kontrol etmek olsun.

select decode(sign(to_date('19.02.2018','dd.mm.yyyy')-to_date(sysdate,'dd.mm.yyyy')),0,
'Doğum günün kutlu olsun bro',1,
'doğum gününe daha varmış',-1,
'senin doğum günün geçmiş boolum') from dual

Bu sayede decode ile bir doğum günü tarihini bugünün tarihi ile kıyasladık. Sonucunda bize mantıklı bir açıklama dönmesini istedik. Görüldüğü gibi Oracle Decode Kullanımı ile SQL sorgu cümlelerinde if else yapısını rahatça kullanabildik. Aynı şekilde Case when yapısı da SQL select sorgularında kullanılabilir bir yapıdır.

Oracle Decode Kullanımı ile gerçekleştirmek istediğimiz bu algoritmayı aynı şekilde Case When yapısı ile kullanmak istiyorsanız. PLSQL Case When Kullanımı başlıklı yazıma göz atabilirsiniz.

 

Faydalandığım Kaynak

Diğer Oracle yazılarım için

Daha faydalı yazılarda görüşmek dileğiyle 🙂

Oracle PL SQL Decode Kullanımı
Oracle PL SQL Decode Kullanımı