PL/SQL FONKSİYONLAR(FUNCTIONS)

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];

(devamı..)

Loading


PL/SQL PROSEDÜRLER (PROCEDURES)

Pl/SQL’in bir prosedürel(yordamsal) bir dildir ve zaten ismini de buradan almıştır. Yordamların da alt programlar(subprogram) olduğunu ve bu alt programların bir araya gelerek  daha büyük kodları meydana getirdiğini söyleyebiliriz. Alt programlar bağımsız(standalone) veya bir paket(package) içerisinde oluşturulabilir. Paket konusunu ileride anlatacağım için bağımsız alt programlar ile devam edeceğiz.

Bağımsız alt programlar  CREATE PROCEDURE ve CREATE FUNCTION şeklinde oluşturulabilir ve silmek için ise  DROP PROCEDURE ve DROP FUNCTION  işlemlerini kullanarak yapabiliriz. Fonksiyonlar konusunu ayrıntılı bir şekilde işleyeceğiz fakat yordamları anlamak için fonksiyon tanımı bize yararlı olacak.

Fonksiyon :  Fonksiyonlar parametre alan ve tek bir değer döndüren alt programlardır.

Prosedür  :  Prosedürler parametre alabilen fakat geriye herhangi bir değer döndürmeyen alt programlardır.

NOT : Şunu da söyleyebiliriz: İşlev açısından prosedürler java/c#’taki void metodlara, fonksiyonlar ise değer dönen (string, int, bool vs.) metodlara benzer.

Prosedür oluştururken kullanacağımız yapı aşağıdaki gibidir.

CREATE [OR REPLACE] PROCEDURE yordam_adı
[(parametre_adı [IN | OUT | IN OUT] parametre_tipi [, ...])]
{IS | AS}
BEGIN
  < yordam gövdesi >
END yordam_adı;

(devamı..)

Loading


PL/SQL DİZİ (ARRAY)

VARRAY aşağıdaki şekildende anlaşılacağı gibi birden fazla aynı tipte degişkeni bir dizi içinde hafızada(memory) ard arda tutan yapıdır(koleksiyon).

Array’ın faydasını anlamak için internette bulduğum bir örneği kullanacak olursak çok daha iyi anlaşılacağını düşünmekteyim; bir bilgisayar programı yaptığınızı düşünün. Kullanıcının 100 değer girmesi isteniyor. Girilen bütün bu sayıların farklı aşamalardan geçeceğini ve bu yüzden hepsini ayrı bir değişkende tutmamız gerektiğini varsayalım. Bu durumda ne yapardınız? a0, a1, a2, …, a99 şeklinde 100 tane değişken tanımlamak elbette mümkün; ama oldukça zahmetli olurdu. Sırf değişkenleri tanımlarken kaybedeceğiniz zamanı düşünürseniz ne demek istediğimi anlarsınız. Bunun için alternatif bir çözümün gerektiği mutlak!

Çok sayıda değişkenin gerektiği durumlarda, diziler imdadımıza yetişir. (Dizi, İngilizce kaynaklarda array olarak geçer.) 100 değişken tanımlamamızın gerektiği yukardaki örneğe dönelim. Tek tek a0, …, a100 yaparak bunu nasıl yazacağınızı zaten biliyorsunuz. Şimdi tek satırda dizi tanımlayarak, bunu nasıl yapacağımızı görelim:

CREATE OR REPLACE TYPE test_array IS VARRAY(100) of number;

PL/SQL DİZİ - PL/SQL ARRAY

Varray aslında bir veri tipidir ve  bunu oluşturmak için aşağıdaki formatı kullanıyoruz.

CREATE OR REPLACE TYPE varray_ismi IS VARRAY(n) of<elementp_tipi>

NOT : PL/SQL bloğunun içinde dizileri(array) aşağıdaki gibide oluşturabiliriz.

TYPE varray_ismi IS VARRAY ( n ) OF < element_tipi >
  • varray_ismi   : varray’e vereceğimiz isimdir.
  • n                    : varray’in maksimum eleman sayısı
  • element_tipi : varray’in içindeki elemanların tipinin ne olacağı.

Örnek;

CREATE OR REPLACE TYPE namearray AS VARRAY (3) OF VARCHAR2 (10);
TYPE namearray IS VARRAY(5) OF VARCHAR2(10);
Type grades IS VARRAY(5) OF INTEGER;
DECLARE
   type namesarray IS VARRAY(5) OF VARCHAR2(10);
   type grades IS VARRAY(5) OF INTEGER;
   names namesarray;
   marks grades;
   total integer;
BEGIN
   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
   marks:= grades(98, 97, 78, 87, 92);
   total := names.count;
   dbms_output.put_line('Total '|| total || ' Students');
   FOR i in 1 .. total LOOP
      dbms_output.put_line('Student: ' || names(i) || 'Marks: ' || marks(i));
   END LOOP;
END;
/

Yukarıdaki örnekte isimlerin tutulduğu namesarray‘i ve isimlere ait notların tutulduğu grades‘imiz var. Görüldüğü gibi oluşturduğumuz değişkenlerin tipini oluşturduğumuz varray tipinde(names ve marks) tanımlıyoruz. Ardından oluşan array’imizin elemanlarını tanımlıyoruz. Ardından da döngüler de öğrendiğimiz  for loop ile array’in eleman sayısı kadar (count ifadesi ilgili arrayin kaç elemandan oluştuğu bilgisini verir) ekrana isimleri ve notları yazdırıyoruz.

Örnek 2;

PL SQL DİZİ - PL SQL ARRAY

DECLARE
   CURSOR c_test_array is
   SELECT  name FROM test_array;
   type c_list is varray (6) of test_array.name%type;
   name_list c_list := c_list();
   counter integer :=0;
BEGIN
   FOR n IN c_test_array LOOP
      counter := counter + 1;
      name_list.extend;
      name_list(counter)  := n.name;
      dbms_output.put_line('Customer('||counter ||'):'||name_list(counter));
   END LOOP;
END;
/

Yukarıda da görüldüğü gibi tablonun name sütununu bir diziye(array) atıyor ve kullanıyoruz.

NOT : yukarıdaki 2 örnektede count ve extend metodunu kullandık bu metodların hepsini koleksiyon(collection) konusunda göreceğiz.

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

Loading


PL/SQL Döngüler (LOOPS)

Bir veya birden fazla işlem satırını, bir koşula bağlı olarak, belirli sayıda veya bir koşul sağlandığı sürece tekrarlayarak çalıştıran kalıplara döngü adı verilir. Yani aşağıda görünen şekil gibi koşulumuz sağlanıyorsa döngümüz devam edecek sağlanmıyorsa döngü sonlanacaktır.

PL/SQL Döngüler - PL/SQL LOOPS

Döngü Tipi Açıklama
PL/SQL Basic LOOP PL/SQL Temel LOOP yapısında koşulumuz sağlanmadığında loop içinden çıkma komutu ile döngümüzü bitiririz.
PL/SQL While LOOP WHILE LOOP mantığında ise basic loop ile aynı şekilde çalışır fakat burada şart sağlanmadan loop içine giremezsiniz basic loop içerisinde 1 defa girilmiş oluyor.
PL/SQL FOR LOOP FOR LOOP yapısında belirlediğimiz sayıda loop içinde dönebiliriz.
PL/SQL Nested loop İç içe loop kullanımı gerçekleştirebilriz.

(devamı..)

Loading


PL/SQL Koşullar(Conditions)

Program komutları yazıldığı sırada akar. Ama çoğunlukla, bu akımı yönlendirmek gerekir. Bu iş için denetim yapılarından koşulları kullanabiliriz. Program akışını, belli mantıksal konullara göre istenen yöne saptıran denetim yapılarıdır.

Aşağıda şekil incelediğimizde condition yazan yer çalışmasını istediğimiz kodun çalışması için gereken koşul belirtiliyor eğer bu koşul doğru ise o zaman conditional code içinde sunduğumuz kodumuz çalışıyor ama  koşul yanlış ise bu şekle göre programımız sonlanıyor.

PL/SQL Koşullar - PL/SQL Conditions - PL/SQL if then else

Aşağıdaki çizelge de PL/SQL ‘de bulunan koşullu ifadeler bulumaktadır.

İfade Açıklama
IF-THEN IF- THEN- END IF;
Bu yapı if ‘in ardından belirtilen koşul sağlandığında then’in ardından gelen kod bloğu çalışır ve end if ile blok sonlanır. Zaten if’in ardındaki koşul sağlanmamış ise direk if then end if bloğu biter.
IF-THEN-ELSE IF-THEN-ELSE – END IF;
Bu koşul yapısında ise if koşuluna bir alternatif oluşturuyoruz.Yani eğer ilk koşul yanlış ise ya da null ise else’e git oradaki kodu çalıştır diye komut vermiş oluyoruz. Bu yapı sayesinde koşul sağlansın ya da sağlanmasın sonunda herhangi bir kod ile bir aksiyon alıyoruz.
IF-THEN-ELSEIF IF-THEN-ELSEIF-ELSEIF-ELSE-END IF;
Bu koşul yapısında birden fazla koşul için kodunuzu destekleyebilirsiniz. Örnek vermek gerekirse notu 0 ile 40 arasındakiler için bir işlem 40 ile 60 arasındakiler için farklı bir işlem 60 ile 80 arasındakiler için farklı bir işlem bunların dışındaki şartlar için de başka bir ihtimal gibi uzatabiliriz.
CASE CASE
Bu koşul yapısında bir değişkenin istenilen koşullardeki değerlerine göre kod blokları çalıştırılıyor.
NESTED IF-THEN-ELSE İç içe if’li bloklar oluşturabilirsiniz.

(devamı..)

Loading


PL/SQL Data Type

Pl/Sql’de varsayılan olarak gelen bir çok veri tipi vardır. Bunların dışında bizlerde veri tipi oluşturuz genel olarak 3 çeşit veri tipi vardır.

  • Önceden Tanımlı veri türleri(Predefined Datatypes)
  • Kullanıcı tanımlı alt veri tipleri(User-Defined Sub types)
  • Veri tipi çevirici(Datatype Conversion)

Önceden Tanımlı veri türleri(Predefined Datatypes)

PL/SQL de değişkenler,sabitler ve parametereler için scalar,LOB(Large Object),Composite ve Reference olmak üzere 4 çeşit very tipi mevcuttur.

Kategori Açıklama
Scalar Number,date,character veya Boolean tipini kapsar.
LOB Resim,video,ses gibi gibi büyük objeler için.
Composite Recor,table,varray gibi tipler
Reference Diger very tipleri için.

Tam liste aşagıda ki gibidir.

PL-SQL Data Type - PL SQL veri tipi (devamı..)

Loading


  • Sertifikasyon



  • Etiketler

  • Topluluklar

                     
                     
  • Copyright © 1996-2010 Mustafa Bektaş Tepe. All rights reserved.
    Türkçeleştirme Blogizma | AltyapıWordPress