Etiketler
Decode, IIF, NVL, NVL2, Oracle - PL-SQL
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.
- Ç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.
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.
- 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.
- 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.
Bu konu ile ilgili aşağıdaki yazıları okumanızı tavsiye ederim.
- ORACLE FUNCTIONS – CONCAT ve ||
- ORACLE FUNCTIONS – SUBSTR
- PL-SQL (ORACLE) Fonksiyonları – WM_CONCAT – Satırları Birleştirmek
Teknik seviyesi biraz daha yüksek yazılar okuman isterseniz aşağıdaki yazılara göz atabilirsiniz.
çalışırken NVL yi anlamamıştım kısa ve öz anlatımınız sayesinde anladım. Teşekkürler.
Oracle fonksiyonlarına ilişkin verdiğiniz örnekler gerçekten çok etkiyeci. Nasıl kullanmaktan ziyade nerede nasıl kullanabileceğimizi göstermeniz benim açımdan çok faydalı oldu. Teşekkürler
“Eğer bir alanı NULL ile işleme sokarsaksak, sonuç her zaman NULL olur.” Veri tabanının yutan elemanı NULL, olsa gerek 🙂 Bir matematikçi gözüyle…
O yüzden “null” ile yapılan işlemler tehlikelidir. Dikkat etmek gerekir…
Decode kullanımı için Teşekkürler…
Keşke T-SQL’de de olsa…
SQL Server 2012 ile birlikte, DECODE kadar olamasa da IIF olarak hayatımıza giriyor. Bu T-SQL için son derece güzel bir gelişme…
https://dervisali.wordpress.com/2011/11/11/sql-server-2012-yenilikler-iif-pl-sql-decode/
Geri bildirim: SQL Server 2012 | Yenilikler | IIF ( PL-SQL | DECODE ) | CHOOSE « Mehmet Özakan
Geri bildirim: PL-SQL (ORACLE) Fonksiyonları – SUBSTR « Mehmet Özakan
Geri bildirim: PL-SQL (ORACLE) Fonksiyonları – CONCAT ve || « Mehmet Özakan
Geri bildirim: PL-SQL (ORACLE) Fonksiyonları – WM_CONCAT – Satırları Birleştirmek « Mehmet Özakan