PLSQL CASE WHEN KULLANIMI-DECODE vs CASE WHEN
Case when yapısı programlamadaki IF-THEN-ELSE yapısına benzer.Koşulumuza göre istediğimiz sonucu üretebiliriz.Case when yapısı hem plsql block içinde hem de select statement içinde kullanılabilir, bu yüzden Decode a göre daha çok kullanılan bir şart yapısıdır.Decode ile Case when yapısını select statement içinde sağlayabiliriz.Ama maalesef plsql block içinde Decode kullanamıyoruz.
Aşağıda hem plsql block içinde kullanımı, hem select statement içinde kullanımına dair örnekler yapmaya
çalıştım..
PLSQL block içinde case kullanimi
DECLARE
yasiniz NUMBER:=UPPER('&YasiniziGiriniz');
durumunuz VARCHAR2(100);
BEGIN
durumunuz := CASE
WHEN yasiniz<=25 THEN 'Gencsin Daha! :) '
WHEN 21<=yasiniz AND yasiniz<=34 THEN 'En Guzel Yaslar..'
WHEN 35<=yasiniz AND yasiniz<=60 THEN 'Yaslaniosun..'
ELSE 'Az Kalmis.. :('
END;
DBMS_OUTPUT.PUT_LINE('Yasiniz: '||yasiniz||' Degerlendirmeniz: ' || durumunuz);
END;
/
Select içinde Case When Kullanimi
SELECT e.OWNER,e.TABLE_NAME,
CASE e.OWNER
WHEN 'SYS' THEN 'Owner is SYS..'
WHEN 'SYSTEM' THEN 'Owner is SYSTEM..'
WHEN 'SYSMAN' THEN 'Owner is SYSMAN..'
ELSE 'Owner is other'
END owner
FROM All_Tables e;
Decode ile Case When yapısı
SELECT e.OWNER,e.TABLE_NAME,
DECODE(e.OWNER,
'SYS','Owner is SYS',
'SYSTEM','Owner is SYSTEM',
'SYSMAN','Owner is SYSMAN',
'Owner is other') table_owner
FROM All_Tables e;
Case içinde Like Kullanımı
SELECT e.OWNER,e.TABLE_NAME,
CASE
WHEN e.OWNER LIKE 'SYS%' THEN 'Owner is SYS or SYSTEM or SYSMAN'
WHEN e.OWNER LIKE '%APPUSER%' THEN 'Owner is Application User..'
ELSE 'Owner is other..'
END owner
FROM All_Tables e;
Notlar:
Case when hem plsql BLOCK içerisinde hem de select statement içinde kullanılabilir.
Case when decode a göre daha performanslı çalışır.
Decode sadece select statement içerisinde kullanılabilir.
Decode ile büyük küçük karşılaştırmaları yapamayız.
Case when yapısı ile LIKE,IN,NOT IN, <, > ,= operatörlerini kullanabiliriz,
Decode ile sadece eşitse şart kontrol edilir.Bu yüzden CASE WHEN daha esnek bir yapıya sahiptir.