Başlangıç > Database, Forms, Oracle, PL/SQL, Reports > pl/sql de greatest ve least kullanımı

pl/sql de greatest ve least kullanımı


Merhaba
Yazdığımız sqllerde ve geliştirdiğimiz programlarda her zaman belli şartlara göre kontroller ekleriz. Bu şartlar bazen mantıksal bazen de büyüktür ya da küçüktür tarzında olabiliyor. Hem sql içinde hem de kod bloğunda elimizdeki birden fazla değer içinden büyük olan ya da küçük olan değere göre işlem yapmamız gerektiğinde, istediğimiz değere bulacak bir if kontrolü yazmamız ve pratik bir sql ile bu sonuca ulaşmamız gerekir. Bu gibi durumlarda if kontrolleri veya sql yazmak yerine pl/sql içinde mevcut olan greatest ve least fonksiyonlarını kullanabiliriz. Bu fonksiyonlar bize aldıkları parametre değerlerinden en büyük ya da en küçük olan değeri geri verirler.
Aldığı parametrelerden en büyük olanını veren greatest ve en küçük olanını veren ise leastfonksiyonunun kullanımlarına bakalım. Önce sql içinde kullanımına sonra da program bloğu içindeki kullanımına bakalım.

select greatest(1,2,3,4,5) from dual; --Bu sql sonucu "5" olacaktır.

select greatest('s','a','m','e','t') from dual; --Bu sql sonucu "t" olacaktır.

select greatest('07.11.2009','10.11.2013') from dual; --Bu sql sonucu "10.11.2013" olacaktır.

select greatest(87,27) from dual; --Bu sql sonucu "87" olacaktır.
select least(1,2,3,4,5) from dual; --Bu sql sonucu "1" olacaktır.

select least('s','a','m','e','t') from dual; --Bu sql sonucu "a" olacaktır.

select least('07.11.2009','10.11.2013') from dual; --Bu sql sonucu "07.11.2009" olacaktır.

select least(87,27) from dual; --Bu sql sonucu "27" olacaktır.

Her iki fonksiyonun da sql içinde kullanımını gördük. Bu fonksiyonlar sql içinde where satırında da kullanılabilirler. Şimdi de kod bloğunda bu fonksiyonların kullanımına göz atalım. Örnek olan “HR” şeması altında bulunan “EMPLOYEES” tablosundaki adları “David”, “Peter”, “John”, “Michael”, “Kevin”, “James” olan kayıtların aldıkları ücretlere göre “5000” den büyük ve küçük olanlar olarak kontrol edelim.

declare
  vEnBuyukDeger varchar2(50);
  vEnKucukDeger varchar2(50);
  vSınırMaas    number := 5000;

  cursor maas is
    select h.first_name, h.last_name, h.salary
      from hr.employees h
     where h.first_name in ('David', 'Peter', 'John', 'Michael', 'Kevin', 'James')
     order by h.first_name asc;

begin
  dbms_output.put_line('----- Sınır Maaş : ' || vSınırMaas || ' TL -----');

  for maas_rec in maas loop
  
    vEnBuyukDeger := greatest(vSınırMaas, maas_rec.salary);
    vEnKucukDeger := least(vSınırMaas, maas_rec.salary);
  
    if maas_rec.salary = vEnBuyukDeger then
      dbms_output.put_line(maas_rec.first_name || ' ' ||
                           maas_rec.last_name || ' ' || vSınırMaas ||
                           ' TL''den fazla maaş alıyor.');
    elsif maas_rec.salary = vEnKucukDeger then
      dbms_output.put_line(maas_rec.first_name || ' ' || maas_rec.last_name || ' ' || vSınırMaas ||
                           ' TL''den az maaş alıyor.');
    else
      dbms_output.put_line(maas_rec.first_name || ' ' || maas_rec.last_name ||
                           ' Kontrol edilen kriterlere göre almıyor.');
    end if;
  
  end loop;
exception
  when others then
    dbms_output.put_line('Hata:' || sqlerrm);
end;

Yukarıdaki kod bloğu çalıştığında aşağıdaki gibi bir çıktı olacaktır. En basit hali ile kişinin maaş bilgisini 5000 ile greatest ve least olarak kontrol edip fazla mı yoksa az mı maaş aldığı bilgisini elde etmiş olduk. Daha farklı yöntemlerle de bu işlem yapılabilinir, en basit olarak sql dışında kod bloğunda da kullanımını test etmiş olduk.

----- Sınır Maaş : 5000 TL -----
David Austin 5000 TL'den az maaş alıyor.
David Lee 5000 TL'den fazla maaş alıyor.
David Bernstein 5000 TL'den fazla maaş alıyor.
James Landry 5000 TL'den az maaş alıyor.
James Marlow 5000 TL'den az maaş alıyor.
John Russell 5000 TL'den fazla maaş alıyor.
John Chen 5000 TL'den fazla maaş alıyor.
John Seo 5000 TL'den az maaş alıyor.
Kevin Mourgos 5000 TL'den fazla maaş alıyor.
Kevin Feeney 5000 TL'den az maaş alıyor.
Michael Rogers 5000 TL'den az maaş alıyor.
Michael Hartstein 5000 TL'den fazla maaş alıyor.
Peter Vargas 5000 TL'den az maaş alıyor.
Peter Hall 5000 TL'den fazla maaş alıyor.
Peter Tucker 5000 TL'den fazla maaş alıyor.

Artık hem sql hemde program bloğunda kontrollerimizi yapabiliriz.
Kolay gelsin.

Reklamlar
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: