17 Kasım 2015 Salı

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ürecetekrarlayarak ç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ü TipiAçıklama
PL/SQL Basic LOOPPL/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 LOOPWHILE 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 LOOPFOR 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.

PL/SQL Basic LOOP

Sintaksis aşagıdaki gibidir.Koşulumuz saglandıgı sürece döngü çalışmaya devam eder.
1
2
3
LOOP
    çalıştırılacak_komut
END LOOP;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DECLARE
   x number := 10;
BEGIN
-- Döngüye başla
   LOOP
      -- x in değerini ekrana basıyoruz
      dbms_output.put_line(x);
      x := x + 10;
      -- x 50 den büyükse döngüden çık
      IF x > 50 THEN
        exit;
      END IF;
   END LOOP;
   -- çıkış(exit) işleminden sonra x in değerini yazdır
   dbms_output.put_line('Çıkıştan sonra x in değeri : ' || x);
END;
/
IF şartının içindeki EXIT yerine EXIT WHEN ifadesinide kullanabiliriz.Örnegin;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE
   x number := 10;
BEGIN
-- Döngüye başla
   LOOP
      -- x in değerini ekrana basıyoruz
      dbms_output.put_line(x);
      x := x + 10;
      -- x 50 den büyükse döngüden çık
      exit WHEN x > 50;
   END LOOP;
   -- çıkış(exit) işleminden sonra x in değerini yazdır
   dbms_output.put_line('Çıkıştan sonra x in değeri : ' || x);
END;
/

PL/SQL While LOOP

Sintaksis aşagıdaki gibidir. While LOOP yapısının en önemli farkı şart sağlanmadan loop içine giremezsiniz basic loop içerisinde 1 defa girilmiş oluyor.
1
2
3
WHILE koşul  LOOP
    çalıştırılacak_komut
END LOOP;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DECLARE
   x number := 10;
BEGIN
-- x 50 den küçük olma koşulu sağlandığı sürece döngüyü
WHILE  (X < 50)
   LOOP
      -- x in değerini ekrana basıyoruz
      dbms_output.put_line(x);
      x := x +10 ;
   END LOOP;
   -- döngünün ardından x in değerini yazdır
   dbms_output.put_line('Döngüden sonra x in değeri : ' || x);
END;
/

PL/SQL FOR LOOP

FOR LOOP yapısıyla dögüyü belirli sayıda çalıştırırız.Sintaksisi aşagıdaki gibidir.
NOT : FOR LOOP ile çok sık kullanılacak iki nokta (..) ifadesine bakalım. (..)  sayesinde döngünün iki sayı arasındaki değerleri belirtmeden gerektiği kadar dönmesini sağlar.
1
2
3
FOR degişken  IN başlangıç_degeri .. bitiş_degeri LOOP
    çalıştırılacak_komut;
END LOOP;
1
2
3
4
5
6
7
8
9
10
DECLARE
   a number(2);
BEGIN
 -- a değeri 10 dan başlayıp 20 de dahil sayısınca dönmesini sağlar
   FOR a in 10 .. 20 LOOP
       -- a nın değerini her seferinde ekrana yazdır
       dbms_output.put_line('value of a: ' || a);
  END LOOP;
END;
/
NOT : REVERSE kelimesini kullanarak ilk degerin ve ikinci degerin yerini degiştirebiliriz.Örnegin;
1
2
3
4
5
6
7
8
9
10
DECLARE
   a number(2);
BEGIN
/* a değeri REVERSE kelimesi sayesinde 20 dan başlayıp 10 de dahil sayısınca dönmesini sağlar*/
   FOR a in REVERSE 10 .. 20 LOOP
       -- a nın değerini her seferinde ekrana yazdır
       dbms_output.put_line('value of a: ' || a);
  END LOOP;
END;
/

PL/SQL Nested loop

Aşagıdaki sintaksisleri kullanarak istediğimiz kadar iç içe döngü kullanabiliriz.
1
2
3
4
5
6
LOOP
    Sequence of statements1
    LOOP
        Sequenceofstatements2
    END LOOP;
END LOOP;
1
2
3
4
5
6
WHILE condition1  LOOP
    sequence_of_statements1
    WHILE condition2 LOOP
        sequence_of_statements2
    END LOOP;
END LOOP;
1
2
3
4
5
6
FOR counter1 IN initial_value1 .. final_value1 LOOP
    sequence_of_statements1
    FOR counter2 IN initial_value2 .. final_value2 LOOP
        sequence_of_statements2
    END LOOP;
END LOOP;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DECLARE
    x number :=0;
    y number :=0;
BEGIN
    WHILE (x<100) LOOP
        WHILE (y<10) LOOP
            dbms_output.put_line(x+y);
            y:=y+1;
        END LOOP;
        y:=0;
        x:=x+10;
    END LOOP;
END;
/

PL/SQL Koşul Kontrolleri

PL/SQL de koşul kontrollerini aşağıdakiler gibi yapabiliriz.
Kontrol İfadesiAçıklama
EXITEXIT kullanarak, koşullu deyimin ve gövdenin geri kalanındaki kodun atlanması sağlanabilir. Böylece döngü acil bir şekilde bitirilmiş olur. Döngü içinde bir EXIT ile karşılaşıldığında döngü bitirilir ve kontrol döngüden sonra gelen ifadeye geçer.
CONTINUEEXIT komutunun, döngüyü kırmak için olduğundan bahsetmiştik. Bunun dışında işlem yapmadan döngüyü devam ettirmek gibi durumlara da ihtiyacımız vardır. Bunun içinde continue komutunu kullanırız.
GOTOKoyacağınız etiketler sayesinde, programın bir noktasından bir başka noktasına atlamanızı sağlar.GOTO, bir döngü değildir ancak döngü olarak kullanılabilir. GOTO, çalışabilmek için etiketlere ihtiyaç duyar.
GOTO deyimi tek başına da kullanılabilir. Fakat mantıksal bir sınama olmadan, goto yapısını kullanmanız, sonsuz döngüye neden olacaktır.

EXIT

PL/SQL Döngüler - PL/SQL LOOPS - PL/SQL EXIT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DECLARE
    a NUMBER(2) := 10 ;
BEGIN
    --a 20 olana kadar devam edecek
    LOOP
        dbms_output . put_line ( 'value of a: ' || a );
        a   := a + 1 ;
        IF a > 15 THEN
        --EXIT ifadesiyle birlikte LOOP a bakmadan dongu sonlandi
        EXIT ;
        END IF ;
    END LOOP ;
END ;
/
1
2
3
4
5
6
7
8
9
10
11
12
DECLARE
    a NUMBER(2) := 10 ;
BEGIN
    --a 20 olana kadar devam edecek
    WHILE a< 20 LOOP
        dbms_output . put_line ( 'value of a: ' || a );
        a   := a + 1 ;
        --EXIT ifadesiyle birlikte LOOP a bakmadan dongu sonlandi
        EXIT WHEN a > 15;
    END LOOP ;
END ;
/

CONTINUE

PL/SQL Döngüler - PL/SQL LOOPS - PL/SQL CONTINUE
1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE
   a   NUMBER (2) := 10;
BEGIN
   WHILE a < 20 LOOP
      DBMS_OUTPUT . put_line ( 'value of a: ' || a );
      a   := a + 1;
      IF a = 15 THEN
        a := a + 1;
          CONTINUE;
        END IF;
      END LOOP;
END;
/

GOTO

PL/SQL Döngüler - PL/SQL LOOPS - PL/SQL GOTO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DECLARE
   a   NUMBER (2) := 10;
BEGIN
  <<loopstart>>
   WHILE a < 20 LOOP
      DBMS_OUTPUT . put_line ( 'value of a:'|| a );
      a   := a + 1;
      IF a = 15 THEN
        a := a + 1;
        GOTO loopstart;
      END IF;
    END LOOP;
END;
/

Hiç yorum yok:

Yorum Gönder