cial Icons

Oracle/PLSQL Null Fonksiyonlar

NULL Fonksiyonlar

     
         Merhaba, bugün sizlere SQL Oracle dilinde null değerlerle ilgili fonksiyonlardan bahsedeceğim. Öncelikle null değerinin ne  anlama geldiğini hatırlayalım. Yazılım dilinde "null" hiçbir değeri olmayan, uzunluğu sıfır olarak kabul edilen bir kavramdır. "Null" değerler 0 veya boşluk değillerdir, çünkü 0 bir number olduğu gibi boşluk da bir char'dır. Bu yüzden çoğu yazılım dillerinde null değerlerle baş etmek için geliştirilmiş özel fonksiyonlar bulunmaktadır.


IS NULL/ IS NOT NULL 

Oracle/PLSQL 'de değerlerin null olup olmadığını test etmek için IS NULL ve IS NOT NULL expression'ları kullanılır. Oracle'da eşitlik operatorleriyle (=) bir değerin null olup olmadığı kontrol edilemez, sonuç unknown döner. Unknown dönen bir sonuç tablodan kayıt getirmez ama "False" ile aynı olmadığı için boolean sorgularda sorun yaratabilir. Bu yüzden IS NULL ile kontrol edilmesi daha garantidir. 



Aşağıdaki sorgu manager_id değerinde NULL değerini taşıyan tüm employees tablosunu getirir.  
SELECT *  FROM employees WHERE manager_id  IS NULL; 

Aşağıdaki statement da last_name değeri NULL olan bütün kayıtları employees tablosundan siler.
DELETE FROM employees WHERE last_name IS NULL;

Aşağıdaki sorguda (null= null) mantıken doğru gibi gelebilir ama equality operatorlerde null değerler kontrol edilmediği için unknown döner, bu yüzden hiçbir zaman ekrana 'a' yazdırmaz.
select id, case when null = null 
           then 'a' 
           end as doop from employees;

Aşağıdaki sorguda Is Null ile kontrol edildiği için kontrol bloğuna girerek ekrana 'a' yazdırır.
select id, case when null is null 
           then 'a' 
           end as doop from employees;

NVL

Null değerler matematiksel işlemlere girdiklerinde sonucunda yine null verdiği için bazen 0'la veya herhangi bir değerle null değerleri replace etmemiz gerekebilir. NVL fonksiyonu syntax'ı kabaca şu şekildedir :
NVL (expr1, expr2) 

//pseudo code 

if expr1 is NULL
   then return expr2 

Örneğin aşağıdaki sorgu employer name değeri null olan bütün kayıtlara "n/a" yazar.
SELECT  id,  nvl( employer_name, 'n/a')  FROM employees; 

NVL2 

NVL2 fonksiyonu, nvl fonksiyonunun bir üst modeli olarak düşünülebilir. Null değerleri daha iyi test ettiği için nvl2 daha çok kullanılmaktadır. Syntax'ı şu şekildedir: 
NVL (expr1, expr2, expr3);

//pseudo code 

if expr1 is NOT NULL
   then return expr2
 else 
    return expr3 

NULLIF 

NULLIF fonksiyonu verilen iki parametreyi birbiriyle karşılaştırır. Eşitse Null return eder, değilse ilk verilen parametreyi döndürür. Syntax'ı şu şekildedir:
NULLIF ( expr1, expr2); 

//pseudo code

if expr1 is equal to expr2
   then return NULL
else return expr1 

Yukarıdaki NULLIF statement'ı aynı zamanda aşağıdaki case when bloğuna da mantık olarak eşittir:
CASE WHEN expr1 = expr2 THEN NULL 
     ELSE expr1 END

NULLIF kullanıma örnek verecek olursak aşağıdaki kod bloğu doğal olarak ZERO_DIVIDE exception hatası verecektir.
select 5/0 from dual;

//ORA- 01476 - divisor is equal to zero 

Fakat bu exception'ı NULLIF fonksiyonunu kullanarak ele alabiliriz, çünkü null değerler aritmetik operasyonlar sonucunda yine null return ederler, yani yutan elemandırlar. Aşağıdaki sorgunun sonucu null döner:
select 5/nullif(0,0) from dual;

1 yorum :

  1. Fonksiyonlar – Konu Anlatımı ve Soru Çözümü
    Lise hayatınızdan itibaren matematik dersini zorlaştıran, özellikle çok fazla çalışmayan öğrenciler için bela olan ve neredeyse her türlü alanda karşımıza çıkan fonksiyonlar konusunu işleyeceğiz. TYT Matematik fonksiyonlar konu anlatımı içeriğine baktığımızda ayt kısmına nazaran daha az, daha basit ve daha anlaşılabilir içerikler ile karşılaşacağız. Fakat ilkokulda öğrendiğiniz sayısal konularından sonra böyle bir olgu sizi biraz...
    fonksiyonlar soru çözümü

    YanıtlaSil