PL/SQL 6: Saklı Yordamlar vs Fonksiyonlar

Merhabalar.

Bu yazıda Saklı Yordamlar(SPler) ile fonksiyonları karşılaştırmaya çalışacağım.

Karşılaştırmaya geçmeden önce örnek olması açısından, oluşturduğum aşağıdaki basit SP ve fonksiyonlara göz atmanızda fayda var.

SP IN olarak öğrencinin numarasını(p_no) ve IN OUT olarak yüzlük sisteme çevirme katsayısını (p_yuzluk_sistem_not) alıyor.

PROCEDURE ogrenci_bilgi(p_no IN NUMBER, p_ad OUT VARCHAR2, p_soyad OUT VARCHAR2, p_yuzluk_sistem_not IN OUT NUMBER)
IS
BEGIN
    SELECT  ad, soyad, not_ortalama * p_yuzluk_sistem_not
      INTO  p_ad, p_soyad, p_yuzluk_sistem_not
      FROM  ogrenci
     WHERE  no = p_no;
END; 

İlk fonksiyon ise öğrencinin numarasını IN olarak alıyor, ad ve soyadı OUT parametre olarak dönüyor ama return değeri olarak notun yüzlük sistemdeki karşılığını dönüyor. 2. fonksiyon ise ogrenci tablosundaki max not ortalamasını dönüyor.:

FUNCTION ogrenci_bilgi_function(p_no IN NUMBER, p_ad OUT VARCHAR2, p_soyad OUT VARCHAR2)
RETURN NUMBER
IS
    p_yuzluk_sistem_not NUMBER:=25;

BEGIN
    SELECT  ad, soyad, not_ortalama * p_yuzluk_sistem_not
      INTO  p_ad, p_soyad, p_yuzluk_sistem_not
      FROM  ogrenci
     WHERE  no = p_no;

RETURN p_yuzluk_sistem_not;
END; 
FUNCTION max_ortalama_getir
RETURN NUMBER
IS
v_max_ortalama NUMBER:=0;

BEGIN
    SELECT  MAX (not_ortalama) INTO v_max_ortalama FROM ogrenci;

    RETURN v_max_ortalama;
END max_ortalama_getir;

Benzerlikler:

  • Her ikisi de IN, OUT ve IN OUT tipinde parametreleri alırlar.
  • Blok yapıları benzerdir. Yerel değişken tanımlamaları aynıdır.
  • SELECT .. INTO deyimiyle tablolardan veriler çekilip, değişkenlere atanabilir.
  • DDL işlemleri içeremezler. (Dinamik SQL kullanımı hariç)

Farklılıklar:

  • Fonksiyonlar RETURN değer dönebilir, SPlerde bu söz konusu değildir.
  • Fonksiyonların (ideal) kullanımı return bir değer elde ederek bu değerin işlenmesi/kullanılmasıdır. SPlerin ise içerisinde belli işlemler(Ör DML işlemleri) yapılmasıdır. Bu yönüyle fonksiyonlar, nesne tabanlı dillerdeki değer dönen metodlara; SPler, void metodlara benzetilebilir.
  • Fonksiyonlarda DML işlemlerinden sadece SELECT deyimi kullanılabilir. SPlerde ise tamamı (SELECT,INSERT,UPDATE,DELETE) kullanılabilir.
  • Fonksiyonlar bir değer ifade ettikleri için sorgu cümlelerinde kullanılabilir, direkt bir değişkene eşitlenebilir veya işlemlerde değişken gibi kullanılabilir. SPler kendileri bu tarz işlemlerde kullanılamaz. Ancak OUT veya IN OUT ile doldurulan değişkenler kullanılabilir.
DECLARE
    v_max_ortalama     NUMBER := 0;
    v_sorgu_ortalama   NUMBER := 0;
BEGIN
    --Fonksiyonları direkt değişkenlere eşitleyebiliyoruz.
    v_max_ortalama := max_ortalama_getir();

    --Sorgu cümlelerinde fonksiyonları "değer" ifade ettiği için kullanabiliyoruz.
    SELECT not_ortalama
      INTO v_sorgu_ortalama
      FROM ogrenci
     WHERE not_ortalama = max_ortalama_getir ();

    dbms_output.put_line ('Fonksiyondan gelen ortalama : ' || max_ortalama_getir ());
    dbms_output.put_line ('Değişkenden gelen ortalama : ' || v_max_ortalama);
    dbms_output.put_line ('Sorgudan gelen ortalama : ' || v_sorgu_ortalama);
END;

Ekran görüntüsü:
sp vs func

Kendinize çook iyi davranın.

Bu sayfa 2869 kez görüntülendi

It's only fair to share...Share on LinkedInShare on FacebookShare on Google+Tweet about this on TwitterShare on Tumblr
Benzer Konular

Yorum Yap


Not - Bunları KullanabilirsinizHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>