While Döngüsü, Break, Continue İfadeleri

Birçok programlama dilinde kullanılan WHILE döngüsü, belirli kod bloklarını koşula bağlı olarak tekrar tekrar çalıştırmaya yarar.

SQL Server’da While’in çeşitli formları olan do..while, for..loop gibi kalıplar kullanılmamaktadır. Sadece While kullanılır.

While bir koşula bağlanmazsa döngü sonsuz devam eder. Bu yüzden genellikle sayac kurguları ile döngünün sınırlanması sağlanır.

While döngüsünün genel yapısı aşağıdaki gibidir. İlk önce koşul kontrol edilir. Daha sonra koşula uyduğu taktirde istenen işlemler yapılır(update,delete,select , insert vs.). BEGIN END aralığına birden çok işlem eklenebilir.

WHILE kosul
BEGIN
islemler END

1-Aşağıdaki örnekte @sayac isimli bir değişken oluşturuldu.

2-Default değer=1 olarak atandı.

3-While döngüsüne 3ten küçük ya da eşit (@sayac <= 3) olduğu taktirde döngüye devam edilecek koşul eklendi.

4-PRINT ile her bir döngüde elde edilen sayac değerinin gösterilmesi sağlandı.

5-@sayac değişkeninin (değişmesi)artması için @sayac  = @sayac  + 1 olarak setlendi.

DECLARE @sayac INT = 1
WHILE ( @sayac <= 3)
BEGIN
    PRINT @sayac  
    SET @sayac  = @sayac  + 1
END

ÇIKTI
1
2
3

İşleyiş:

İlk default değere bakılır. 3ten küçükse döngüye girer. Döngü içinde print ile yazdırılır ve @sayac  = @sayac  + 1 ifadesinden olayı @sayac=2 olur.

Tekrar while koşuluna gelir. 3ten küçükse tekrar işlem gerçekleşir. Print 2 yazar. 3 değeri atanır. En son 3 için de aynı işlemler tekrarlanır. Son atanan 4 değeri koşulu karşılamadığı için döngüden çıkar.

DECLARE @sayi INT
DECLARE @limit INT;
SET @sayi = 1
SET @limit = 2;
    
WHILE @sayi< 10
BEGIN
   SELECT * FROM products --tablo için norhwind veritabanı kullanılmıştır
   ORDER BY ProductID
   OFFSET @sayi ROWS
   FETCH NEXT @limit ROWS ONLY
   SET @sayi = @sayi + 5;
END

1-@sayı ve @limit değişkenleri tanımlandı.

2- SET ile değişkenlere ilgili değerler atandı.

3-While döngü koşulu @sayi< 10 olarka belirlendi.

4-Eğer sayı 10dan küçükse, @sayi kadar satır kaydırarak (OFFSET @sayi ROWS)

Sadece @Limit kadar satır getirerek

SELECT * FROM products ORDER BY ProductID sorgusunu çalıştır.

5-@sayı değerini 5 arttır. Döngünün başına dön.

ÇIKTI:

CONTINUE

Continue ifadesi While döngüsü içinde kullanıldığında döngünün başına geri dönmeyi sağlar.

DECLARE @sayı INT;
DECLARE @mod INT;
SET @sayı = 1;
    
WHILE @sayı<= 6
BEGIN
   set @mod =  @sayı % 2
   IF @mod = 1
    BEGIN
    SET @sayı = @sayı + 1;
       CONTINUE
    END
   PRINT @sayı
   SET @sayı = @sayı + 1;
END;


ÇIKTI:
2
4
6

1-@sayı ve @mod isimli değişkenler tanımlandı.

2-@sayı değişkenine default olarak 1 değeri atandı.

3-döngü koşulu girildi. (@sayı<= 6) eğer @sayı değeri 6dan küçük ya da eşitse döngüye girecek ve birkaç işlem uygulanacak

4- set @mod =  @sayı % 2 yazılarak @mod değişkenine değer atandı. (@sayı değerinin 2ye bölümünden kalan)

5-Kontrol yapabilmek için IF eklendi. Eğer @mod=1 ise @sayı değerini 1 arttır(SET @sayı = @sayı + 1;) ve while ifadesinin başına dön(dönmeyi sağlayan CONTINUE ifadesidir).

6-Eğer @mod=1 değilse IF koşulundan çıkar ve (PRINT @sayı) ile ilgili değeri yazdırır. Son olarak SET @sayı = @sayı + 1 ifadesi ile sayıyı 1 arttırır ve While Döngüsünün başına döner.

BREAK

Break ifadesi While döngüsü içinde kullanıldığında döngüden çıkabilmeyi sağlar.

Yukarıdaki örnekte CONTINUE yerine BREAK yazılıp çalıştırıldığında herhangi bir çıktı vermeyecektir. Çünkü, 2.adımda atanan default değeri (1) kullanarak 4. Adımda @mod=1 bulacak ve  5.adımda IF koşulunu sağladığı için BREAK komutu ile döngüden çıkış yapacaktır.

Eğer default değer olarak 2 atanırsa, 6.adıma gelecek ve 2 değerini yazdıracaktır.

DECLARE @sayi INT;
SET @sayi = 0;
    
WHILE @sayi<= 15
BEGIN
   IF @sayi > 8
    BEGIN
        BREAK
    END
   PRINT 'Sayı değeri: ' + CONVERT(NVARCHAR,@sayi)
   SET @sayi = @sayi + 3;
END

1-@sayı değişkeni tanımlandı.

2-@sayı değişkenine default olarak 0 atandı.

3-while döngüsüne girebilme koşulu olarak @sayi<= 15 eklendi.

4-Eğer @sayı>8 ise döngüden çıkması sağlandı.

5-Eğer @sayı<8 ise PRINT ile sayının yazılması sağlandı. (metin ile birleştirildiği için @sayi değeri nvarchar olarak convert edildi.)

6-Son olarka tekrar başa dönmeden önce @sayı değerinin +3 olarka artması sağlandı.

Aşağıdaki kaynaklardan ilham alınmıştır:

https://www.sqlshack.com/sql-while-loop-understanding-while-loops-in-sql-server/

https://www.sqlshack.com/sql-while-loop-with-simple-examples/

buketbodur tarafından yayımlandı

İş zekası ve Veri Ambarı Danışmanı

Yorum bırakın