Stored Procedure ve Function Arasındaki Fark Nedir?
Veritabanı geliştirme süreçlerinde, Stored Procedure (Saklı Yordam) ve Function (Fonksiyon) en çok kullanılan iki programlama yapısıdır. Ancak, bu iki yapı arasındaki farklar, kullanım alanları ve performans avantajları birçok PL/SQL mülakatında sorulabilecek kritik konular arasındadır.
Bu makalede, Stored Procedure ve Function arasındaki temel farkları, kullanım alanlarını ve mülakatlarda karşına çıkabilecek önemli noktaları ele alacağız.
- Stored Procedure Nedir?
Stored Procedure, tekrar tekrar çalıştırılabilen, içinde SQL ifadeleri ve PL/SQL kodları barındıran bir kod bloğudur. DML (INSERT, UPDATE, DELETE) işlemleri dahil olmak üzere kompleks işlemleri barındırabilir.
📌 Stored Procedure’un Özellikleri:
✔ Parametre alabilir (IN, OUT, INOUT)
✔ Birden fazla değeri döndürebilir
✔ DML işlemleri (INSERT, UPDATE, DELETE) gerçekleştirebilir
✔ Exception Handling (Hata Yönetimi) yapılabilir
✔ Performansı artırmak için önceden derlenmiş olarak saklanır
Stored Procedure Örnek Kullanımı
CREATE OR REPLACE PROCEDURE hasta_ekle(
p_hasta_id IN NUMBER,
p_ad IN VARCHAR2,
p_soyad IN VARCHAR2
)
IS
BEGIN
INSERT INTO hastalar (id, ad, soyad)
VALUES (p_hasta_id, p_ad, p_soyad);
COMMIT;
END hasta_ekle;
Bu prosedür, hasta bilgilerini hastalar tablosuna ekler. Bir stored procedure çağırmak için:
EXEC hasta_ekle(101, 'Ali', 'Demir');
- Function Nedir?
Function, belirli bir girdiyi alıp bir çıktı döndüren bir kod bloğudur. Özellikle hesaplama işlemlerinde, dönüş değeri gerektiren durumlarda kullanılır.
📌 Function’ın Özellikleri:
✔ Mutlaka bir değer döndürmelidir
✔ İçinde SQL işlemleri yapılabilir ama DML işlemleri önerilmez
✔ Stored Procedure’lere kıyasla daha fazla performans optimizasyonu yapılabilir
✔ SELECT ifadelerinde kullanılabilir
Function Örnek Kullanımı
CREATE OR REPLACE FUNCTION hasta_yasi_hesapla(p_dogum_tarihi IN DATE)
RETURN NUMBER
IS
v_yas NUMBER;
BEGIN
v_yas := FLOOR(MONTHS_BETWEEN(SYSDATE, p_dogum_tarihi) / 12);
RETURN v_yas;
END hasta_yasi_hesapla;
Bu fonksiyon, bir hastanın doğum tarihini alıp yaşını döndürür. Çağırmak için:
SELECT hasta_yasi_hesapla(DATE '1990-05-10') FROM dual;
- Stored Procedure ve Function Arasındaki Farklar
- PL/SQL Mülakatlarında Stored Procedure ve Function ile İlgili Gelebilecek Sorular
PL/SQL mülakatında, Stored Procedure ve Function ile ilgili şu tarz sorularla karşılaşabilirsin:
Soru 1: Stored Procedure ve Function arasındaki fark nedir?
Bu soruya yukarıdaki tabloyu referans göstererek yanıt verebilirsin.
Soru 2: Bir Function içinden DML işlemi çağırabilir miyiz?
Evet, çağırabiliriz ama bu önerilmez. Çünkü Function’lar genellikle deterministik çalışmalıdır (aynı girdiye her zaman aynı çıktıyı vermelidir).
Örneğin, aşağıdaki Function geçerli ama iyi bir uygulama değildir:
CREATE OR REPLACE FUNCTION hasta_ekle_fonksiyon(p_hasta_id IN NUMBER, p_ad IN VARCHAR2, p_soyad IN VARCHAR2)
RETURN VARCHAR2
IS
BEGIN
INSERT INTO hastalar (id, ad, soyad) VALUES (p_hasta_id, p_ad, p_soyad);
COMMIT;
RETURN 'Hasta eklendi!';
END;
Bir Function’ın DML işlemi yapması performans açısından risklidir çünkü SELECT sorgularında beklenmeyen yan etkiler oluşturabilir.
Soru 3: Stored Procedure içinden Function çağırabilir miyiz?
Evet, Stored Procedure içinden Function çağırabiliriz.
Örneğin:
CREATE OR REPLACE PROCEDURE hasta_yas_goster(p_dogum_tarihi IN DATE)
IS
v_yas NUMBER;
BEGIN
v_yas := hasta_yasi_hesapla(p_dogum_tarihi);
DBMS_OUTPUT.PUT_LINE('Hastanın yaşı: ' || v_yas);
END;
Bu prosedür, hasta_yasi_hesapla fonksiyonunu çağırarak sonucu ekrana yazdırır.
- Ne Zaman Stored Procedure, Ne Zaman Function Kullanmalıyız?
📌 Stored Procedure Kullanılmalı:
Birden fazla işlem (DML + mantıksal işlemler) yapılacaksa
Çıktı birden fazla değişkene atanacaksa
Performans kritikse
📌 Function Kullanılmalı:
Tek bir değer döndürülmesi gerekiyorsa
Matematiksel hesaplamalar yapılacaksa
SELECT içinde kullanılacaksa
Sonuç
Stored Procedure ve Function, PL/SQL geliştiricileri için vazgeçilmez iki araçtır. Hangisinin nerede kullanılacağını iyi bilmek, hem mülakatlarda hem de gerçek projelerde seni bir adım öne çıkarır.
🎯 Özetle:
✅ Stored Procedure, DML işlemleri yapabilir, birden fazla çıktı döndürebilir.
✅ Function, mutlaka bir değer döndürür, SELECT içinde kullanılabilir.
Top comments (0)