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.
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. |
PL/SQL Basic LOOP
Sintaksis aşagıdaki gibidir.Koşulumuz saglandıgı sürece döngü çalışmaya devam eder.
LOOP çalıştırılacak_komut END LOOP;
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;
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.
WHILE koşul LOOP çalıştırılacak_komut END LOOP;
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.
FOR degişken IN başlangıç_degeri .. bitiş_degeri LOOP çalıştırılacak_komut; END LOOP;
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;
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.
LOOP Sequence of statements1 LOOP Sequenceofstatements2 END LOOP; END LOOP;
WHILE condition1 LOOP sequence_of_statements1 WHILE condition2 LOOP sequence_of_statements2 END LOOP; END LOOP;
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;
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 İfadesi | Açıklama |
EXIT | EXIT 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. |
CONTINUE | EXIT 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. |
GOTO | Koyacağı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
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 ; /
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
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
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; /
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