Nerelerde tercih edilir ?
- Çogunlukla sayisal bir deger döndürmesi beklenen alanlardaki veriler eger "null" ise 0 ile degistirmek için kullanilir. Örnegin, müsterilerin yil yil gerçeklestirdigi tüm ödemeleri toplamak istiyorsunuz. Her bir müsterinin her yil için ödeme yapmamis olacagi olasi ve beklendik bir durumdur. Dolayisiyla müsteri ile dönem ve ödeme tablosunu "left join" ile bagladiginizda, bazi dönemlere ait ödeme kayitlariniz "null" olarak gelecektir. Aritmetik isleme dahil edebilmek için bu alanlari 0 ile degistirmeniz gerekmektedir.
- String degerleri birlestimek istediginizde, "null" kontrolu yapmaniz gerekmektedir. Çünkü birlestireceginiz alanlar (metinler) içinde eger bir tane bile "null" degere sahip alan varsa, tüm ifadeniz "null" olacaktir. Bu durumda "null" olan degeri '' (bos karakter) ile degistirmeniz gerekmektedir. Örnegin, il , ilçe ve semt taniminin bulundugu tablonuzdaki bu alanlari birlestirerek müsterinin adresini tek satir halinde elde etmek istiyorsaniz, bu alanlardan herhangi birisinin girilmemis olma ihtimalini (null olma ihtimali) göz ardi etmemelisiniz aksi taktirde sadece semt bilgisi girilmemis kayitlar için bile tüm adres degerini "null" olarak elde edersiniz.
select NVL(donem_toplami,0) as toplam ...
select NVL(metin1,'') || NVL(metin2,'') || ... || NVL(metinN,'') as olusturulanMetin ...
PL-SQL Fonksiyonlari : NVL2
NVL2( deger, deger_Null_degilse_bu_deger_ile_degistir, deger_Null_ise_bu_deger_ile_degistir)
fonksiyonu deger i eger deger NULL degilse 2. parametre ile NULL is 3.parametre ile degistirir.
Özellestirilmis bir IF-ELSE yazimidir. Eger alan "null" degil ise deger_Null_degilse_bu_deger_ile_degistir degeri ile , "null" ise deger_Null_ise_bu_deger_ile_degistir degeri ile degistirir.
Nerede tercih edilir ?
- Bir alanin "null" olup olmama durumuna göre kullaniciya anlamli bir mesaj vermek istediginizde kullanabilirsiniz. "null" ise YOK , degil ise VAR yazmak için kullanabilirsiniz.
PL-SQL Fonksiyonlari : DECODE
Decode( ifade, aranan_deger1, aranan_deger1e_esit_ise_bu_deger_ile_degistir,aranan_deger2 ,aranan_deger2e_esit_ise_bu_deger_ile_degistir, [aranan_degerN, aranan_degerNe_esit_ise_bu_deger_ile_degistir]... [hicbiri_ile_eslesmedi_ise_bu_deger_ile_degistir] )
fonksiyonu ifade içersinde aranan_deger1 ... aranan_degerN degerlerini arar ve ifade hangi aranan_deger e karsilik geliyor ise aranan_degere_esit_ise_bu_deger_ile_degistir degerini döndürür.
Fonksiyonu IF-THEN-ELSE-END kullanimina karsilik gelir. Pl-Sql özelinde CASE-WHEN-ELSE-ENDCASE-WHEN kalibinda istediginiz herhangi bir kosulu kullanabilirken, Decode esitlik durumlari için elverislidir. kalibina karsilik gelir. Bu kalibin esitlik durumlari için özellestirilmis halidir. Yani
Nerelerde tercih edilir ?
- NVL fonksiyonlari sadece "null" ile kiyaslama yaparken, Decode fonksiyonu herhangi bir deger ileNVL fonksiyonlarini kapsar. Onlarin kullanildigi heryerde kullanilabilir. kiyasma yapabilme imkani tanir. Dolayisyla
- Belirli kodlara karsilik, bazi tanimlar yazilmak isteniyorsa kullanilir. Örnegin, Decode(IL_KODU,34, 'ISTANBUL', 10, 'BALIKESIR' , 10.5 , 'BANDIRMA' , 35, 'IZMIR' , 35.5 , 'KARSIYAKA', 'TÜRKIYE') de oldugu gibi dönen il koduna göre ISTANBUL,BALIKESIR, BANDIRMA ... yada hiç eslesen olmamasi durumda TÜRKIYE döndürmek için kullanilabilir.
- Referans tablolari olmayan degerleri anlamlandirmak için kullanilabilir. DECODE(Alan,1,'Evet', 0, 'Hayir','Belki') seklinde tanimlarsak, Alan'dan dönen deger 1 ise Evet , 0 ise Hayir , 1 veya 0 dan farkli bir deger döner ise Belki degerini geri döndürecektir.
http://dervisali.blogspot.com/2008/06/oracle-functions.html
Alintidir --> http://dervisali.blogspot.com/2008/06/oracle-functions.html