Oracle NVL Foksiyonu
|
Bu yazı Oracle veritabanında integer null bir değerin toplama işleminde `0` olarak nasıl eklenebileceğini göstermek amacıyla yazılmıştır. Veritabanımızdaki integer bir sütun, not null constraint`i ile tanımlanmamışsa boş olarak kaydedilebilir. Fakat biz bu alandaki değerin de içinde bulunduğu bir toplama işlemi yapmak istersek işlemin çıktısını boş olarak görürüz. Yapmamız gereken ise bu alandaki null değeri başka bir değerle değiştirmek. Eğer toplama işleminin sonucunu değiştirmek istemiyorsak değiştireceğimiz değerin `0` olması gerekmektedir.
NVL fonksiyonu null bir değeri başka bir değerle değiştirir!
Örnek bir veritabanımız olsun. Sicil numarası, ad, soyad, maaş ve bonus alanları içersin. 2 tane veri ekleyelim. İlk kayıtta maaş ve bonus alanları null olmasın, ikinci kayıtta ise maaş değeri null olmasın bonus değeri null olsun. Bu alanları sorguladığımızda aşağıdaki gibi bir sonuçla karşılaşırız:

Görüldüğü gibi maaş+bonus alanı boş olarak dönmektedir. Bu durumu düzeltmek için sql sorgumuz aşağıdaki gibi olmalıdır:
select ad, soyad, maas, bonus, maas+nvl(bonus,0);

Örnekte görüldüğü gibi sorgu istediğimiz sonucu döndürmüştür. NVL fonksiyonu günlük hayatta işlemlerimizi bir hayli kolaylaştırmaktadır.
|
|
|
| Yazar: Oğuz Yılmaz |
Tarih: 22 Temmuz 2009 |
| Okunma Sayısı: 1228 |
Etiketler: Oracle Sql MySql |
|
Sizden gelenler...
>> sinan özkan << 22 Temmuz 2009 10:30
|
|
hacı güzel bişeymiş acaba başka veritabanlarında da aynı fonksiyon var mı
|
|
|
>> Oğuz Yılmaz << 22 Temmuz 2009 10:54
|
|
Evet Sinan diğer veritabanlarında da benzer fonksiyonlar var. MySql veritabanında `nvl` fonksiyonunun yerine IFNULL(birinci ifade, ikinci ifade), MsSql de ise ISNULL(birinci ifade, ikinci ifade) metotları mevcut. Ayrıca bu metotların daha genel bir formu olan COALESCE(birinci ifade, ikinci ifade) metodu da aynı iş için kullanılabilir.
|
|
|
>> mehmetulvi << 22 Temmuz 2009 12:42
|
|
Guzel bır fonksıyonmus yoksa kendımız bos yere fonksıyon yazacaktık.:)
|
|
|
>> Hasan Alper Öcalan << 22 Temmuz 2009 15:56
|
|
Evet, hem fonksiyon yazmaya zaman harcayacaktık, hem de sistemin o karmaşık kodu çalıştırması için bir sürü zaman geçecekti.. Bu harika oldu:) Teşekkürler Oğuz;)
|
|
|
>> Oğuz Yılmaz << 22 Temmuz 2009 16:11
|
|
Rica ederim Alper, senin ve Mehmet`in de dediği gibi performansı arttıracak bir fonksiyon ama kayıt sayısı gerçek anlamda fazla olduğunda sql tarafından gelecek bir yavaşlamanın da söz konusu olduğu unutulmamalıdır. Yine de şu aşamada bu fonksiyon bizi bir adım öne geçirecektir.
|
|
|
|
|
| En Son Yorumlanan Yazılar |
|
|
|
| İstatistikler |
|
Online : 1
|
|
Bugün : 138
|
|
Bu Ay : 2131
|
|
Bu Yıl : 59965
|
|
Toplam : 90794
|
|
|
|
|