PL-SQL (ORACLE) Fonksiyonları / Decode, NVL, NVL2
PL-SQL Fonksiyonları : NVL
NVL(deger, deger_Null_ise_bu_deger_ile_degistir )
fonksiyonu eğer deger ifadesinin değeri "null" ise, deger_Null_ise_bu_deger_ile_degistir ifadesi ile değiştirir. Diğer durumlarda deger i geri döndürecektir.
Fonksiyonun amacı, null olarak gelen değerleri, belirtilen değer ile değiştirmektir. Bu işlev ile ilgili alandaki tüm değerlerin "null" olmaması garanti edilir.
Nerelerde tercih edilir ?
- Çoğunlukla sayısal bir değer döndürmesi beklenen alanlardaki veriler eğer "null" ise 0 ile değiştirmek için kullanılır. Örneğin, müşterilerin yıl yıl gerçekleştirdiği tüm ödemeleri toplamak istiyorsunuz. Her bir müşterinin her yıl için ödeme yapmamış olacağı olası ve beklendik bir durumdur. Dolayısıyla müşteri ile dönem ve ödeme tablosunu "left join" ile bağladığınızda, bazı dönemlere ait ödeme kayıtlarınız "null" olarak gelecektir. Aritmetik işleme dahil edebilmek için bu alanları 0 ile değiştirmeniz gerekmektedir.
- String değerleri birleştimek istediğinizde, "null" kontrolu yapmanız gerekmektedir. Çünkü birleştireceğiniz alanlar (metinler) içinde eğer bir tane bile "null" değere sahip alan varsa, tüm ifadeniz "null" olacaktır. Bu durumda "null" olan değeri '' (boş karakter) ile değiştirmeniz gerekmektedir. Örneğin, il , ilçe ve semt tanımının bulunduğu tablonuzdaki bu alanları birleştirerek müşterinin adresini tek satır halinde elde etmek istiyorsanız, bu alanlardan herhangi birisinin girilmemiş olma ihtimalini (null olma ihtimali) göz ardı etmemelisiniz aksi taktirde sadece semt bilgisi girilmemiş kayıtlar 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 Fonksiyonları : NVL2
NVL2( deger, deger_Null_degilse_bu_deger_ile_degistir, deger_Null_ise_bu_deger_ile_degistir)
fonksiyonu deger i eğer deger NULL değilse 2. parametre ile NULL is 3.parametre ile değiştirir.
Özelleştirilmiş bir IF-ELSE yazımıdır. Eğer alan "null" değil ise deger_Null_degilse_bu_deger_ile_degistir değeri ile , "null" ise deger_Null_ise_bu_deger_ile_degistir değeri ile değiştirir.
Nerede tercih edilir ?
- Bir alanın "null" olup olmama durumuna göre kullanıcıya anlamlı bir mesaj vermek istediğinizde kullanabilirsiniz. "null" ise YOK , değil ise VAR yazmak için kullanabilirsiniz.
PL-SQL Fonksiyonları : 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 karşılık geliyor ise aranan_degere_esit_ise_bu_deger_ile_degistir degerini döndürür.
Fonksiyonu IF-THEN-ELSE-END kullanımına karşılık gelir. Pl-Sql özelinde CASE-WHEN-ELSE-ENDCASE-WHEN kalıbında istediğiniz herhangi bir koşulu kullanabilirken, Decode eşitlik durumları için elverişlidir. kalıbına karşılık gelir. Bu kalıbın eşitlik durumları için özelleştirilmiş halidir. Yani
Nerelerde tercih edilir ?
- NVL fonksiyonları sadece "null" ile kıyaslama yaparken, Decode fonksiyonu herhangi bir değer ileNVL fonksiyonlarını kapsar. Onların kullanıldığı heryerde kullanılabilir. kıyasma yapabilme imkanı tanır. Dolayısyla
- Belirli kodlara karşılık, bazı tanımlar yazılmak isteniyorsa kullanılır. Örneğin, Decode(IL_KODU,34, 'İSTANBUL', 10, 'BALIKESİR' , 10.5 , 'BANDIRMA' , 35, 'İZMİR' , 35.5 , 'KARŞIYAKA', 'TÜRKİYE') de olduğu gibi dönen il koduna göre İSTANBUL,BALIKESİR, BANDIRMA ... yada hiç eşleşen olmaması durumda TÜRKİYE döndürmek için kullanılabilir.
- Referans tabloları olmayan değerleri anlamlandırmak için kullanılabilir. DECODE(Alan,1,'Evet', 0, 'Hayır','Belki') şeklinde tanımlarsak, Alan'dan dönen değer 1 ise Evet , 0 ise Hayır , 1 veya 0 dan farklı bir deger döner ise Belki degerini geri döndürecektir.
Alıntıdır --> http://dervisali.blogspot.com/2008/06/oracle-functions.html