26 Haziran 2012 Salı

Oracle PL SQL 'de Döngüler ve Kullanım Şekilleri

PL SQL'de döngü kullanım şekiller'i temel olarak ikiye ayrılır.
1. Kullanım en çok kullanılan döngü çeşidi olan for döngüleridir.Kulanım şekli (Syntax'ı) aşağıda gösterildiği gibidir.

For döngüsü kullanım şekli (Syntax);

FOR sayac IN [REVERSE] alt_index .. ust_index
LOOP
     {.Yapılacak işlemler.}
     --Yapılacak işlemler
END LOOP;



Yukarıda syntax'ı verilen for döngüsü için "sayac" isimli değişken , döngü değişkeni dir ve kullanım şekline göre (REVERSE keyword 'ünün durumuna göre) ya birer birer artar yada azalır.REVERSE anahtar kelimesi yazılırsa sayac değişkeninin değeri birer birer  azalır.

Ufak bir örnek vermek gerekirse 1'den 100'e kadar olan sayıları ve kare'lerini bir tabloya INSERT eden bir sorgu yazalım.

FOR sayac IN 1 .. 100
LOOP
     --Yapılacak işlemler
    
     INSERT
        INTO TABLE_NAME
                (
                    COLUMN1,
                    COLUMN2
                )
    VALUES(
                    sayac, --Döngü değişkeni
                    sayac*sayac --Döngü değişkeninin karesi
                )
    
END LOOP;

Yukarıda anlatılan kullanım şeklinin yanında For döngüsünün ikinci bir kullanım şekli daha vardır bu 2. kullanım şekliyle kayıt setleri içerisinde dönebilirsiniz.

For döngüsü kullanım şekli (Syntax);

FOR kayit  in kayit_seti
LOOP
     {.Yapılacak işlemler.}
     --Yapılacak işlemler
END LOOP;

Yukarıda syntax'ı verilen for döngüsünü açıklamak gerekirse kayit_seti isimli Veri setimiz bir "Cursor" , "Tablodan çekilen Select" , Oracle Dizileri veya bir Record Set olabilir ve bu kayıt seti içerisindeki her bir satır sırasıyla kayit isimli değişkenimize yüklenir ve kayit"."  diyerek bu satırda bulunan bütün kolonlara erişim imkanımız bulunmaktadır.Basit bir örnekle açıklamak gerekirse Bir tablodaki verileri alıp başka bir tabloda yedekleyen bir sorgu yazalım.Bunu elbetteki çok basit bir yolla yapabiliriz ama şu an amacımız döngüleri öğrenmek olduğu için döngülerle bu işi yapalım.

FOR KAYIT  IN (SELECT TABLE_ID
                                     COLUMN1,
                                     COLUMN2
                           FROM TABLE_NAME
                         WHERE COLUMN3 = 5)
LOOP
     --Yapılacak işlemler
    
     INSERT
        INTO YEDEK
                (
                    COLUMN1,
                    COLUMN2,
                    RF_TABLE_ID
                )
     VALUES(
                    KAYIT.COLUMN1,
                    KAYIT.COLUMN2,
                    KAYIT.TABLE_ID
                 );
    
END LOOP;

2. Döngü kullanım şeklide "While" veya "Do While" olarak bilinen "Repeat-Until Loop" döngü çeşitidir.

Kullanım şekli (Syntax);

DECLARE
    recordIndex NUMBER := 1;
BEGIN
    LOOP
   
        --Yapılacak İşlemler
   
        recordIndex := recordIndex + 1;
       
        EXIT WHEN recordIndex > 5; --Eğer döngü değişkeni 5'den büyük bir değere ulaşmıssa döngüden çık
       
    END LOOP;
END;

Yukarıda 'ki döngü syntax'ında EXIT WHEN recordIndex > 5satırının konumuna göre döngünüz "While" veya "Do While" diye nitelendirdiğimiz döngülerden biri olacaktır.

Veya isterseniz direk olarak While döngüsü kullanabilirsiniz.

Kullanım şekli (Syntax);


DECLARE
    recordIndex NUMBER := 1;
BEGIN
    WHILE recordIndex > 5 LOOP
  
        --Yapılacak İşlemler  
        recordIndex := recordIndex + 1;
      
    END LOOP;
END;

2 yorum: