Prosedürleri öğrenirken fonksiyonlarla ilgili olarak geriye bir değer döndürür demiştik.

Yeri gelmişken internette karşılaştığım prosedür  veya fonksiyonların önemiyle ilgili güzel bir örnek; Bir işlemi birden çok yaptığınızı düşünün. Her seferinde aynı işlemi yapan kodu yazmak oldukça zahmetli olurdu. Fonksiyonlar veya prosedürler, bu soruna yönelik yaratılmıştır. Sadece bir kereye mahsus yapılacak işlem tanımlanır. Ardından dilediğiniz kadar, bu fonksiyonu çağırırsınız. Üstelik fonksiyonların yararı bununla da sınırlı değildir. Fonksiyonlar, modülerlik sağlar. Sayının asallığını test eden bir fonksiyon yazıp, bunun yanlış olduğunu farkederseniz, bütün programı değiştirmeniz gerekmez. Yanlış fonksiyonu düzeltirsiniz ve artık programınız doğru çalışacaktır. Üstelik yazdığınız fonksiyonlara ait kodu, başka programlara taşımanız oldukça basittir.

Bir fonksiyon  aşağıdaki şekilde oluşturulur.

CREATE [OR REPLACE] FUNCTION fonksiyon_adi
[(parametre_adi[IN | OUT | IN OUT] parametre_tipi [, ...])]
RETURN donen_degiskenin_tipi
{IS | AS}
BEGIN
   < fonksiyonun gövdesi>
END [fonksiyon_adi];

Örnek1 ; Aşagıdaki gibi bir tablomuz olsun.

PL/SQL FONKSİYONLAR - PL/SQL FUNCTIONS
Tablo count unu veren Fonksiyonumu oluşturuyorum.

CREATE OR REPLACE FUNCTION totalCustomers
RETURN number IS
   total number(2) := 0;
BEGIN
   SELECT count(*) into total
   FROM test_array;

   RETURN total;
END;
/

Fonksiyonumuzu çağırırken yapmamız gereken tek şey fonksiyonun adını yazıp gereken parametreleri içerisine uygun tiplerde vermek ve ardından fonksiyondan dönen veriyi bir değişken içerisine alarak kullanmak. Şimdi bir örnekle bu yazdıklarımı pekiştirelim.

DECLARE
   c number(2);
BEGIN
   c := totalCustomers();
   dbms_output.put_line('Total no. of Customers: ' || c);
END;
/

Örnek 2; Yazdığımız fonksiyonu nasıl çağırdığımızı yukarda gördük. Şimdi parametre alan bir fonksiyonu oluşturma ve çağırma işlemlerine bir örnek ile devam edelim.

DECLARE
   a number;
   b number;
   c number;

FUNCTION func_result(x IN number, y IN number)
RETURN number
IS
    z number;
BEGIN
   IF x > y THEN
      z:= x-y;
   ELSE
      z:= x+y;
   END IF;

   RETURN z;
END; 

BEGIN
   a:= 23;
   b:= 45;

   c := func_result(a, b);
   dbms_output.put_line('Sonuc : ' || c);
END;
/

Özyineli(Recursive) Fonksiyonlar

Bir fonksiyon içerisinden, bir diğerini çağırabiliriz. Rekürsif fonksiyonlar, fonksiyon içersinden fonksiyon çağırmanın özel bir hâlidir. Rekürsif fonksiyon bir başka fonksiyon yerine kendisini çağırır ve şartlar uygun olduğu sürece bu tekrarlanır. Rekürsif, Recursive kelimesinden geliyor ve tekrarlamalı, yinelemeli anlamını taşıyor. Kelimenin anlamıyla, yaptığı iş örtüşmekte.

DECLARE
   num number;
   factorial number;

FUNCTION fact(x number)
RETURN number
IS
   f number;
BEGIN
   IF x=0 THEN
      f := 1;
   ELSE
      f := x * fact(x-1);
   END IF;
RETURN f;
END;

BEGIN
   num:= 6;
   factorial := fact(num);
   dbms_output.put_line(' Factorial '|| num || ' is ' || factorial);
END;
/

Yararlı olması Dilegiyle …
Yazar : Mustafa Bektaş Tepe

Kaynaklar;
http://www.tutorialspoint.com/plsql/plsql_basic_syntax.htm
https://developersdaily.wordpress.com
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/toc.htm
https://oracle-base.com/articles/misc/introduction-to-plsql

6,274 total views, 2 views today