Pazartesi , 21 Eylül 2015
Anasayfa / MAKALELER / Veri Tabanı / PL/SQL Fonksiyonları; NVL,NVL2,Decode

PL/SQL Fonksiyonları; NVL,NVL2,Decode

PL/SQL Fonksiyonları :NVL

style=”font-size: 18pt; font-family: inherit; color:black;”>NVL(degerdeger_Null_ise_bu_deger_ile_degistir )

fonksiyonu eger deger ifadesinin degeri “null” ise, deger_Null_ise_bu_deger_ile_degistir ifadesi ile degistirir. Diger durumlarda deger i geri döndürecektir.

Fonksiyonun amaci, null olarak gelen degerleri, belirtilen deger ile degistirmektir. Bu islev ile ilgili alandaki tüm degerlerin “null” olmamasi garanti edilir.

 

 

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 …

 

NVL2degerdeger_Null_degilse_bu_deger_ile_degistirdeger_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.

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

Ercan Yazgan

Oracle Technologies Specialist Yalova Doğumluyum, İlköğretimimi İstanbulda, Lise eğitimini ise memleketim olan Gümüşhane'de Anadolu Lisesinde tamamladım. Lisans eğitimimi ise Sakarya Üniversitesinde, hayalim olan bilgisayar mühendisliğinde tamamladım. Üniversitedeyken kariyer hedefimi database teknolojileri üzerine belirledim ve Oracle ile projeler geliştirdim. Her zaman yeniye ve yeniliğe olan ilgimden dolayı lisans projemde ODI ve OBIEE teknolojilerini kullanarak veri ambarı sistemlerine giriş yaptım. Şu an özel bir şirkette PLSQL developer olarak çalışmaktayım. İlgi alanlarım ve bildiğim teknolojiler; PLSQL, Oracle forms/reports, Oracle Administration

Latest posts by Ercan Yazgan (see all)

Powered by Starbox

Hakkında Ercan Yazgan

Oracle Technologies Specialist Yalova Doğumluyum, İlköğretimimi İstanbulda, Lise eğitimini ise memleketim olan Gümüşhane'de Anadolu Lisesinde tamamladım. Lisans eğitimimi ise Sakarya Üniversitesinde, hayalim olan bilgisayar mühendisliğinde tamamladım. Üniversitedeyken kariyer hedefimi database teknolojileri üzerine belirledim ve Oracle ile projeler geliştirdim. Her zaman yeniye ve yeniliğe olan ilgimden dolayı lisans projemde ODI ve OBIEE teknolojilerini kullanarak veri ambarı sistemlerine giriş yaptım. Şu an özel bir şirkette PLSQL developer olarak çalışmaktayım. İlgi alanlarım ve bildiğim teknolojiler; PLSQL, Oracle forms/reports, Oracle Administration

Bir yorum

  1. teşekkürler

Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*


Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>