Oracle Örnekle PL/SQL LOOP
⚡ Akıllı Özet
PL/SQL döngüleri, bir kod bölümünü istenen sayıda tekrar tekrar çalıştırır. PL/SQL, CONTINUE, EXIT, EXIT WHEN ve GOTO ile kontrol edilen temel, FOR ve WHILE döngüleri sunar ve iç içe yapıları düzgün bir şekilde yönetmek için döngülere etiket eklenebilir.
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 eğitimde, PL/SQL'deki döngü kavramına ve döngülerdeki kontrol akışına bakacağız.
Döngü Kavramına Giriş
Döngü kavramı kodlamada aşağıdaki avantajları sağlar:
- Kodun yeniden kullanılabilirliği.
- Kod boyutu küçültüldü.
- Kolay kontrol akışı.
- Azaltılmış karmaşıklık.
Aşağıdaki diyagram tuvaleti göstermektedir.ping kavramı.
Yukarıdaki şemada, döngü koşulu kontrol edilir ve koşul sağlandığı sürece yürütme bloğu çalışır.
Her yinelemede, döngünün koşulunu belirleyen döngü sayacı değişkeni, kontrolün döngüden çıkmasını sağlamak için değişir. Bazı durumlarda bu sayaç, önceden tanımlanmış bir sayı için artırma veya azaltma işlemidir, diğer durumlarda ise blok, koşul sağlanana kadar çalışmaya devam eden bir arama koşuludur.
Döngü Kontrol İfadeleri
Döngü kavramını öğrenmeden önce, döngü kontrol ifadelerini öğrenmek önemlidir. Bu ifadeler, bir döngü içindeki yürütme akışını kontrol eder.
DEVAM
Bu anahtar kelime, PL/SQL motoruna bir döngü içinde CONTINUE ile karşılaştığında, yürütme bloğundaki kalan kodu atlayıp bir sonraki yinelemeyi hemen başlatmasını söyler. Bu, esas olarak döngü içindeki kodun belirli yineleme değerleri için atlanması gerektiğinde kullanılır.
ÇIKIŞ / ÇIKIŞ NE ZAMAN
Bu anahtar kelime, PL/SQL motoruna mevcut döngüden hemen çıkmasını söyler. İç içe döngülerde, iç döngüdeki EXIT komutu yalnızca iç döngüyü sonlandırır, dış döngüyü değil. 'EXIT WHEN' ifadesi, Boolean bir sonuç veren bir ifadeyle takip edilir; sonuç TRUE ise, kontrol sonlandırılır.
GOTO
Bu ifade, kontrolü etiketli bir ifadeye (“GOTO ;”) aktarır. Aşağıdaki kısıtlamalara sahiptir:
- Kontrolün aktarımı yalnızca alt programlar içerisinde yapılabilir.
- Hata ayıklama bölümünden yürütme bölümüne kontrol aktarımı yapılamaz.
Bu ifadeyi, başka bir alternatif yoksa kullanmanız önerilmez, çünkü kod kontrolü tracKontrol bir taraftan diğerine aktarıldığında verimlilik oldukça zorlaşır.
PL/SQL'de Döngü Türleri
PL / SQL Aşağıdaki üç döngü türünü sağlar:
- Temel döngü ifadesi
- Döngü ifadesi için
- While döngüsü ifadesi
Aşağıdaki tabloda, temel döngü detaylı olarak ele alınmadan önce üçünün karşılaştırılması yer almaktadır.
| döngü | Çıkış kriteri | En iyi kullanım zamanı |
|---|---|---|
| Temel döngü | Blokta açıkça belirtilmiş ÇIKIŞ | Çıkış, sabit bir sayıya veya koşula bağlı değildir. |
| Döngü için | Sayaç menzilinin sonuna ulaştı. | İterasyon sayısı önceden bilinmektedir. |
| WHILE döngüsü | Durum yanlış hale gelir. | Döngü, bir koşul sağlandığı sürece çalışmalıdır. |
Temel Döngü İfadesi
Bu, PL/SQL'deki en basit döngü yapısıdır. Çalıştırma bloğu 'LOOP' anahtar kelimesiyle başlar ve 'END LOOP' ile biter. Döngüden çıkış koşulu, çalıştırma bloğunun içinde verilmelidir ve EXIT anahtar kelimesi açıkça belirtilmelidir.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Sözdizimi Açıklaması:
- 'LOOP' anahtar kelimesi döngünün başlangıcını, 'END LOOP' ise sonunu belirtir.
- Çalıştırma bloğu, EXIT koşulu da dahil olmak üzere çalıştırılması gereken tüm kodu içerir.
- Yürütme bölümü, herhangi bir yürütülebilir ifade içerebilir.
Not: EXIT anahtar kelimesi içermeyen basit bir döngü ifadesi, asla durmayan sonsuz bir döngüdür.
Örnek 1: Bu örnekte, basit bir döngü ifadesi kullanarak 1'den 5'e kadar olan sayıları yazdırıyoruz.
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; /
Code Açıklama:
- Code 2 hattı: 'a' değişkenini 'NUMBER' olarak tanımlayıp '1' değeriyle başlatıyoruz.
- Code 4 hattı: “Program başlatıldı” ifadesinin yazdırılması.
- Code 5 hattı: 'LOOP' anahtar kelimesi döngünün başlangıcını belirtir.
- Code 6 hattı: 'a'nın değerini yazdırır.
- Code 7 hattı: 'a' değerini 1 artırır.
- Code 8 hattı: 'a' değerinin 5'ten büyük olup olmadığını kontrol eder.
- Code 9 hattı: 'END LOOP' anahtar kelimesi, yürütme bloğunun sonunu işaretler.
- 6 ila 8. satırlar, 'a' değeri 6'ya ulaşana kadar çalışmaya devam eder; bu noktada koşul DOĞRU değerini döndürür ve döngüden çıkılır.
- Code 10 hattı: “Program tamamlandı” ifadesinin yazdırılması.
Döngülerin Etiketlenmesi
PL/SQL'de döngüler etiketlenebilir. Etiket "<<" ve ">>" işaretleri arasına alınmalıdır. Özellikle iç içe döngülerde, döngüleri etiketlemek daha okunabilir bir yapı sağlar. Etiket, ilgili döngüden çıkmak için bir EXIT komutunda verilebilir; böylece kontrol, EXIT komutunu ve ardından dış döngü etiketini vererek iç içe yapının dış döngüsünden doğrudan çıkabilir.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <execution_block_ends> END LOOP;
Sözdizimi Açıklaması:
- Dış ilmeğin içinde bir ilmek daha var.
- '< >' ve '< '>' bu döngülerin etiketleridir.
Örnek 1: Bu örnekte, temel bir döngü ifadesi kullanarak 1'den başlayarak sayılar yazdırıyoruz. Her sayı, değeri kadar kez yazdırılıyor. Serinin üst sınırı, bildirim kısmında sabitlenmiştir. Bunu başarmak için etiket kavramını kullanıyoruz.
DECLARE a NUMBER:= 0; b NUMBER; upper_limit NUMBER := 4; BEGIN dbms_output.put_line('Program started.'); <<outer_loop>> LOOP a:= a+1; b:= 1; <<inner_loop>> LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:= b+1; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Açıklama:
- Code 2-3. satırlar: 'a' ve 'b' değişkenlerini 'NUMBER' veri türünde tanımlıyoruz.
- Code 4 hattı: 'upper_limit' değişkenini 'NUMBER' türünde ve '4' değerinde tanımlıyoruz.
- Code 6 hattı: “Program başlatıldı” ifadesinin yazdırılması.
- Code 7 hattı: Dış döngüye “outer_loop” etiketi verilmiştir.
- Code 9 hattı: 'a'nın değeri 1 artırılır.
- Code 11 hattı: İç döngüye “inner_loop” adı verilmiştir.
- Code 13 hattı: 'a' değerinin 'upper_limit' değerinden yüksek olup olmadığını kontrol eden EXIT koşulu. Eğer değilse, devam eder; aksi takdirde dış döngüden doğrudan çıkar.
- Code 14 hattı: 'b' değerini yazdırma.
- Code 15 hattı: 'b' değerini 1 artırır.
- Code 16 hattı: 'b'nin 'a'dan büyük olup olmadığını kontrol eden EXIT koşulu. Eğer öyleyse, iç döngüden çıkılır.
- Code 19 hattı: “Program tamamlandı” ifadesinin yazdırılması.







