ORACLE DATABASE Etiketli Yazılar

Oracle – NVL, NVL2, NULLIF, COALESCE

NVL (expr1, expr2)

NULL bir değeri  gerçek bir değere dönüştürmek için kullanırız. Çevrim değil yerine geçme söz konusudur.

SELECT AD,SOYAD,NVL(BAKIYE,0)  
FROM VWOGRENCI

Hiç hareket görmemiş yani alacak ve borç kaydı yapılmamış bir öğrencinin bakiyesi null dönecektir, bu sorgu ile null değerlerin 0 olarak dönmesini sağlıyoruz.

Yeni başlayanlar tarafından en çok yapılan yanlışlardan biride, NULL ile boş ya da sıfır değeri eşdeğer görmektir.

NULL; alana herhangi bir değer atanmadığını ifade eder.Boş (“”) veya Sıfır (0) atamaları ise karakter ve nümerik değerlerdir.

SELECT STOK_KODU "Stok Kodu"  ,MAX_ISKONTO "Maximum İskonto"
FROM TBLSTSABIT
WHERE MAX_ISKONTO = NULL

Bu kullanım hatalıdır çünkü NULL bir değer yoktur bu yüzden atama kontrolü de olamaz.

Eğer Maximum İskonto değeri belirlenmemiş kayıtları listelemek amaç ise, doğrusu şu şekilde olmalıdır:

SELECT STOK_KODU "Stok Kodu"  ,MAX_ISKONTO "Maximum İskonto"
FROM TBLSTSABIT
WHERE MAX_ISKONTO IS NULL

NVL2 (expr1, expr2, expr3)

Fonksiyonda expr1 NULL değilse expr2, expr1 NULL ise  expr3 ‘ü değer olarak döndürür.

SELECT  NVL2(ikinciad  , ad+' '+ikinciad+' '+soyad  ,  ad+' '+soyad) "AD SOYAD"
FROM VWOGRENCI

NULLIF (expr1, expr2)
Bu fonksiyon ile iki değer karşılaştırılır, eğer expr1 ile expr2 eşitse NULL, eşit değiller ise expr1 sonuç olarak dönülür.

expr1 ve expr2 sayısal değerler ya da aynı veritipinin değerleri olmalıdır.

NULLIF deyimi Oracle 9i, Oracle 10g, Oracle 11g versiyonlarında desteklenmektedir.

NULLIF(12, 12)     -- "NULL"
NULLIF(12, 13)     -- "12"
NULLIF('orhan', 'orhan')    --"NULL"
NULLIF('orhan', 'ibrahim')  --"orhan"
NULLIF(NULL, 12)   -- "ORA-00932 error because expr1 can not be the literal NULL" hatası.

COALESCE (expr1, expr2, . . , exprn)

Coalesce fonksiyonu aldığı argümanlardan null olmayan ilk ifadeyi görüntüler.

SELECT coalesce (ceptel, istel, evtel,'Girilmemiş') "Telefon"
FROM Ogrenci;

Bu Sorgu girilmiş olan ilk telefon bilgisini sonuç olarak döndürür;
bu işlemi alternatif bir yolla yapmak isteseydik;

IF ceptel is not null THEN
     result := ceptel;
ELSIF istel is not null THEN
    result := istel;
ELSIF evtel is not null THEN
    result := evtel;
ELSIF 'Girilmemiş' is not null THEN
    result := 'Girilmemiş';
ELSE
    result := null;
END IF;

şeklinde kullanmamız gerekirdi.

Coalesce deyimi Oracle 9i, Oracle 10g, Oracle 11g versiyonlarında desteklenmektedir.

Microsoft SQL Server’da;
NVL karşılığı ISNULL,
NULLIF ve COALESCE (‘koliş’) ise aynen kulanılır.
NVL2‘nin ise karşılığı yok.