Koşullu İfadeleri Kullanma

Genel Fonksiyonlar

Veritabanındaki NULL değerleri işlemek için genel işlevler kullanılır. Genel NULL işleme işlevlerinin amacı, NULL değerlerini alternatif bir değerle değiştirmektir. Aşağıda bu işlevleri kısaca göreceğiz.

NVL

NVL işlevi, NULL değeri için alternatif bir değerin yerini alır.

Sözdizimi:

NVL( Arg1, replace_with )

Sözdiziminde her iki parametre de zorunludur. NVL işlevinin tüm veri türleriyle çalıştığını unutmayın. Ve ayrıca orijinal dizgenin veri türü ve yerine koyma uyumlu durumda olmalıdır, yani Oracle tarafından aynı veya dolaylı olarak dönüştürülebilir olmalıdır.

Arg1 bir karakter değeriyse, oracle onları karşılaştırmadan önce değiştirme dizesini arg1 ile uyumlu veri türüne dönüştürür ve ifade1'in karakter kümesinde VARCHAR2'yi döndürür. Arg1 sayısal ise, Oracle en yüksek sayısal önceliğe sahip bağımsız değişkeni belirler, diğer bağımsız değişkeni örtük olarak bu veri türüne dönüştürür ve bu veri türünü döndürür.

Aşağıdaki SELECT deyimi, bir çalışan henüz herhangi bir işe atanmamışsa, yani JOB_ID NULL ise 'n / a' gösterecektir. Aksi takdirde, gerçek JOB_ID değerini görüntüleyecektir.

SELECT  first_name, NVL(JOB_ID, 'n/a')
FROM employees;

NVL2

NVL üzerinde bir geliştirme olarak Oracle, yalnızca NULL sütun değerleri için değil, aynı zamanda NOT NULL sütunlar için de değeri ikame edecek bir işlev getirmiştir. NVL2 işlevi, NULL yerine alternatif bir değerin yanı sıra NULL olmayan değeri değiştirmek için kullanılabilir.

Sözdizimi:

NVL2( string1, value_if_NOT_null, value_if_null )

Bir çalışanın JOB_CODE değeri NULL ise, aşağıdaki SELECT ifadesi "Bench" i görüntüler. İŞ KODU'nun boş olmayan kesin bir değeri için, 'Görev Atanmış' sabit değerini gösterecektir.

SQL> SELECT NVL2(JOB_CODE, 'Job Assigned', 'Bench')
FROM employees;

NULLIF

NULLIF işlevi iki bağımsız değişkeni ifade1 ve ifade2'yi karşılaştırır. İfade1 ve ifade2 eşitse, NULL döndürür; aksi takdirde ifade1 döndürür. Diğer boş işleme fonksiyonunun aksine, ilk argüman NULL olamaz.

Sözdizimi:

NULLIF (expr1, expr2)

İlk bağımsız değişkenin NULL olarak değerlendirilen bir ifade olabileceğini, ancak değişmez NULL olamayacağını unutmayın. Fonksiyonun çalışması için her iki parametre de zorunludur.

Aşağıdaki sorgu, her iki giriş değeri 12 eşit olduğu için NULL döndürür.

SELECT	NULLIF (12, 12)
FROM DUAL;

Benzer şekilde, her iki dizge de eşit olmadığından aşağıdaki sorgu 'SUN' döndürür.

SELECT NULLIF ('SUN', 'MOON')
FROM DUAL;

KÖMÜR

Daha genel bir NVL biçimi olan COALESCE işlevi, bağımsız değişken listesindeki ilk boş olmayan ifadeyi döndürür. En az iki zorunlu parametre alır, ancak maksimum bağımsız değişkenlerin sınırı yoktur.

Sözdizimi:

COALESCE (expr1, expr2, ... expr_n )

Aşağıdaki SELECT sorgusunu göz önünde bulundurun. Bir çalışan için adres alanlarına beslenen ilk boş olmayan değeri seçer.

SELECT COALESCE (address1, address2, address3) Address
FROM  employees;

İlginç bir şekilde, COALESCE işlevinin çalışması IF..ELSIF..ENDIF yapısına benzer. Yukarıdaki sorgu şu şekilde yeniden yazılabilir -

IF address1 is not null THEN
   result := address1;
ELSIF address2 is not null THEN
   result := address2;
ELSIF address3 is not null THEN
   result := address3;
ELSE
   result := null;
END IF;

Koşullu İşlevler

Oracle, SQL deyiminde bile koşulları uygulamak için koşullu işlevler DECODE ve CASE sağlar.

DECODE işlevi

İşlev, IF..THEN..ELSE koşullu prosedür ifadesinin SQL eşdeğeridir. DECODE, tüm veri türlerinin değerleri / sütunları / ifadeleri ile çalışır.

Sözdizimi:

DECODE (expression, search, result [, search, result]... [, default])

DECODE işlevi, ifadeyi sırayla her arama değeriyle karşılaştırır. İfade ve arama argümanı arasında eşitlik varsa, karşılık gelen sonucu döndürür. Eşleşme olmaması durumunda, tanımlanmışsa varsayılan değer döndürülür, aksi takdirde NULL. Herhangi bir tür uyumsuzluğu durumunda, oracle dahili olarak sonuçları döndürmek için olası örtük dönüştürme yapar.

Aslında Oracle, DECODE işlevi ile çalışırken iki boşun eşdeğer olduğunu düşünür.

SELECT DECODE(NULL,NULL,'EQUAL','NOT EQUAL') 
FROM DUAL;

DECOD
-----
EQUAL

İfade null ise, Oracle yine boş olan ilk aramanın sonucunu döndürür. DECODE işlevindeki maksimum bileşen sayısı 255'tir.

SELECT	first_name, salary, DECODE (hire_date, sysdate,'NEW JOINEE','EMPLOYEE')
	FROM employees;

CASE ifadesi

CASE ifadeleri, DECODE ile aynı kavram üzerinde çalışır ancak sözdizimi ve kullanım açısından farklılık gösterir.

Sözdizimi:

CASE  [ expression ]
   WHEN condition_1 THEN result_1
   WHEN condition_2 THEN result_2
   ...
   WHEN condition_n THEN result_n
   ELSE result
END

Oracle araması soldan başlar ve gerçek bir koşul bulana kadar sağa doğru hareket eder ve ardından onunla ilişkili sonuç ifadesini döndürür. Hiçbir koşul doğru bulunmazsa ve bir ELSE yan tümcesi varsa, Oracle else ile tanımlanan sonucu döndürür. Aksi takdirde, Oracle null döndürür.

Bir CASE ifadesindeki maksimum argüman sayısı 255'tir. Basit bir CASE ifadesinin ilk ifadesi ve isteğe bağlı ELSE ifadesi dahil tüm ifadeler bu sınıra dahil edilir. Her WHEN ... THEN çifti iki bağımsız değişken olarak sayılır. Bu sınırın aşılmasını önlemek için, CASE ifadelerini, return_expr'in kendisi bir CASE ifadesi olacak şekilde iç içe yerleştirebilirsiniz.

SELECT first_name, CASE	WHEN salary < 200 THEN 'GRADE 1'
			WHEN salary > 200 AND salary < 5000 THEN 'GRADE 2'
			ELSE 'GRADE 3'
		   END CASE
FROM employees;	

ENAM    CASE
----    -------
JOHN    GRADE 2
EDWIN   GRADE 3
KING    GRADE 1