Oracle Örnekle PL/SQL LOOP

Döngüler nedir?

Döngüler, bir programdaki kodun belirli bir bölümünün istenilen sayıda çalıştırılmasına olanak tanır.

Bu dersimizde PL/SQL'de döngü kavramını ve döngülerde kontrol akışını göreceğiz.

Döngü Kavramına Giriş

Döngü kavramı kodlamada şu avantajı sağlar.

  • Kodun yeniden kullanılabilirliği
  • Azaltılmış kod boyutu
  • Kolay kontrol akışı
  • Azaltılmış Karmaşıklık

Aşağıdaki diyagram döngü kavramını resimli bir şekilde göstermektedir

Oracle PL/SQL DÖNGÜSÜ

Yukarıdaki diyagramda döngü koşulu kontrol edilecek ve döngü koşulu sağlandığı sürece yürütme bloğu yürütülecektir.

Her yinelemede, döngü koşuluna gerçekten karar veren döngü sayacı değişkeni, kontrolün döngüden çıkmasını sağlayacak şekilde değiştirilmelidir. Bazı durumlarda bu döngü sayacı değişkeni önceden tanımlanmış bir sayım için artırma/azaltma operatörüdür ve bazı durumlarda bloğu karşılayana kadar çalıştırmaya devam eden bir arama koşuludur.

Döngü Kontrol İfadeleri

Döngü kavramını öğrenmeden önce döngü kontrol ifadelerinin öğrenilmesi zorunludur. Döngü kontrol ifadeleri aslında döngü içindeki yürütme akışını kontrol eden ifadelerdir. Aşağıda döngü kontrol ifadeleri hakkında detaylı açıklama bulunmaktadır.

DEVAM

Bu anahtar kelime, PL/SQL motoruna, PL/SQL motoru döngü içinde bu anahtar kelimeyle karşılaştığında, kodun yürütme bloğunda kalan kodu atlayacağı ve bir sonraki yinelemenin hemen başlayacağı yönünde bir talimat gönderir. Bu esas olarak döngü içindeki kodun belirli yineleme değerleri için atlanmak istemesi durumunda kullanılacaktır.

ÇIKIŞ / ÇIKIŞ NE ZAMAN

Bu anahtar kelime, PL/SQL motoruna, PL/SQL motoru bu anahtar kelimeyle karşılaştığında mevcut döngüden hemen çıkacağı yönünde bir talimat gönderir. Eğer PL/SQL motoru EXIT ile iç içe bir döngüde karşılaşırsa, o zaman tanımlandığı döngüden yani iç içe bir döngüden çıkacaktır, iç döngüde EXIT vermek sadece iç döngüden kontrolden çıkacaktır ancak dış döngüden değil. 'EXIT WHEN' ifadesinin ardından Boole sonucunu veren bir ifade gelir. Sonuç DOĞRU ise, kontrol ÇIKIŞ yapacaktır.

GOTO

Bu ifade denetimi etiketli ifadeye ("GOTO ;") aktaracaktır. Bunun aşağıdaki kısıtlamaları vardır

  • Kontrolün aktarımı yalnızca alt programlar içerisinde yapılabilir.
  • Denetimin istisna işleme kısmından yürütme kısmına aktarımı yapılamaz

Kontrolün bir parçadan diğer parçaya aktarılması nedeniyle programda kod-kontrol izlenebilirliği çok zor olacağından, başka alternatif olmadığı sürece bu ifadenin kullanılması önerilmez.

PL/SQL'de Döngü Türleri

PL / SQL aşağıdaki üç tip döngüyü sağlar

Temel Döngü İfadesi

Bu döngü ifadesi PL/SQL'deki en basit döngü yapısıdır. Yürütme bloğu 'LOOP' anahtar kelimesiyle başlar ve 'END LOOP' anahtar kelimesiyle biter.

Kontrolün döngüden çıkabilmesi için çıkış koşulu bu yürütme bloğunun içinde verilmelidir.

Döngüden çıkmak için EXIT anahtar sözcüğünün yürütme kısmında açıkça verilmesi gerekir.

Temel Döngü İfadesi

 LOOP
<execution block starts>
<EXIT condition based on developer criteria> 
<execution_block_ends>
END LOOP;

Sözdizimi Açıklaması:

  • Yukarıdaki sözdiziminde, 'LOOP' anahtar sözcüğü döngünün başlangıcını, 'END LOOP' ise döngünün sonunu belirtir.
  • Yürütme bloğu, EXIT koşulu da dahil olmak üzere yürütülmesi gereken tüm kodu içerir.
  • Yürütme kısmı herhangi bir yürütme ifadesini içerebilir.

Not: EXIT anahtar sözcüğü içermeyen temel döngü ifadesi, asla durmayacak bir INFINITE-LOOP olacaktır.

Örnek 1: Bu örnekte, temel döngü ifadesini kullanarak 1'den 5'e kadar olan sayıları yazdıracağız. Bunun için aşağıdaki kodu çalıştıracağız.

Temel Döngü İfadesi

DECLARE 
a NUMBER:=1; 
BEGIN
dbms_output.put_line('Program started.');
LOOP
dbms_output.put_line(a);
a:=a+1;
EXIT WHEN a>5;
END LOOP;
dbms_output.put_line('Program completed');
END:
/

Kod Açıklaması:

  • Kod satırı 2: 'a' değişkeninin 'NUMBER' veri türü olarak bildirilmesi ve '1' değeriyle başlatılması.
  • Kod satırı 4: “Program başladı” ifadesinin yazdırılması.
  • Kod satırı 5: 'LOOP' anahtar kelimesi döngünün başlangıcını işaret eder.
  • Kod satırı 6: 'a'nın değerini yazdırır.
  • Kod satırı 7: 'a'nın değerini +1 artırır.
  • Kod satırı 8: 'a' değerinin 5'ten büyük olup olmadığını kontrol eder.
  • Kod satırı 9: 'END LOOP' anahtar kelimesi yürütme bloğunun sonunu işaret eder.
  • 6. satırdan 8. satıra kadar olan kod, 'a' 6 değerine ulaşana kadar yürütülmeye devam edecek, çünkü koşul TRUE'ya dönecek ve kontrol döngüden ÇIKACAKTIR.
  • Kod satırı 10: “Program tamamlandı” ifadesinin yazdırılması

Döngülerin Etiketlenmesi

PL/SQL'de döngüler etiketlenebilir. Etiket “<<” ile “>>” arasına yazılmalıdır. Döngülerin özellikle iç içe geçmiş döngü kodlarında etiketlenmesi daha fazla okunabilirlik sağlayacaktır. Belirli bir döngüden çıkmak için EXIT komutunda etiket verilebilir. Etiket kullanılarak, çıkış komutunun ardından dış döngü etiketinin verilmesiyle kontrol, iç içe geçmiş döngülerin dış döngüsünden, döngülerin içindeki herhangi bir yerden doğrudan çıkmak için yapılabilir.

Döngülerin Etiketlenmesi

<<OUTER_LOOP>>
LOOP 
	<execution_block_starts>
	.
	<<INNER_LOOP>>
	LOOP --inner
		<execution_part>
	END LOOP;
	.
	<executi_block_ends>
END LOOP;

Sözdizimi Açıklaması:

  • Yukarıdaki sözdiziminde, çıkış döngüsünün içinde bir döngü daha vardır.
  • '< >' ve '< >' bu döngülerin etiketleridir.

Örnek 1: Bu örnekte, Basic döngü ifadesini kullanarak 1'den başlayarak sayı yazdıracağız. Her sayı, değeri kadar kez yazdırılacak. Serinin üst sınırı program bildirimi kısmında sabitlenmiştir. Bunu başarmak için etiket kavramını nasıl kullanabileceğimizi öğrenelim. Bunun için aşağıdaki kodu çalıştıracağız

Döngülerin EtiketlenmesiDöngülerin Etiketlenmesi

DECLARE
a NUMBER:=0;
b NUMBER;
upper-limit NUMBER :=4;
BEGIN
dbms_output.put_line(‘Program started.' ); 
«outerloop»‭	‬
LOOP 
a:=a+1;
b:=l;
«inner loop»
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:=b+l;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Kod Açıklaması:

  • Kod satırı 2-3: 'a' ve 'b' değişkeninin 'NUMBER' veri türü olarak bildirilmesi.
  • Kod satırı 4: 'upper_limit' değişkeninin değeri '4' olan 'NUMBER' veri türü olarak bildiriliyor
  • Kod satırı 6: “Program başladı” ifadesinin yazdırılması.
  • Kod satırı 7: Dış döngü “outer_loop” olarak etiketlendi
  • Kod satırı 9: 'a'nın değeri 1 artırılır.
  • Kod satırı 11: İç döngü “inner_loop” olarak etiketlendi.
  • Kod satırı 13: 'a' değerinin 'upper_limit' değerinden yüksek olup olmadığını kontrol eden EXIT koşulu. Değilse daha ileri gidecektir, aksi takdirde doğrudan dış döngüden çıkar.
  • Kod satırı 14: 'b' değerini yazdırma.
  • Kod satırı 15: 'b'nin değerini +1 artırır.
  • Kod satırı 16: 'b' değerinin 'a'dan büyük olup olmadığını kontrol eden EXIT koşulu. Eğer öyleyse, o zaman kontrolden iç döngüden çıkacaktır.
  • Kod satırı 14: “Program tamamlandı” ifadesinin yazdırılması

ÖZET

döngü Temel Döngü
Çıkış kriteri Yürütme bölümünde 'EXIT' anahtar kelimesiyle karşılaşıldığında çıkın
kullanım Çıkışın herhangi bir özel koşula bağlı olmadığı durumlarda kullanılması iyidir.