PL/SQL Döngüler

Oracle PL/SQL ile komutları belirli bir koşula göre tekrar çalıştırmak için kullanılan loop, for loop, while döngüleri ve exit, continue ve goto anahtar kelimeleri kullanımı yer alıyor.

Döngüler

Döngüler belirli bir koşula veya belirli bir koşulun sağlanmasına kadar komutların tekrar çalıştırılması için kullanılan yapılardır.

LOOP

Blok içerisinde yer alan komutların sürekli-sonsuz olarak çalıştırılması için kullanılır.

LOOP
    -- Komutlar
END LOOP;

NOT: Döngü EXIT anahtar kelimesi ile sonlandırılmazsa sürekli-sonsuz olarak çalışacaktır.

Örnek LOOP kullanımı aşağıdaki gibidir.

SET SERVEROUTPUT ON;
BEGIN
    LOOP
        DBMS_OUTPUT.put_line('Merhaba Oracle!');
        EXIT;
    END LOOP;
END;

Örnek LOOP WHEN EXIT kullanımı aşağıdaki gibidir.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    LOOP
        DBMS_OUTPUT.put_line(v_sayi);
        v_sayi := v_sayi + 1;
        EXIT WHEN v_sayi > 10;
    END LOOP;
END;

WHILE

Blok içerisinde yer alan komutların koşul sağlanana kadar komutların tekrar çalıştırılması için kullanılır.

WHILE KOŞUL LOOP
   -- KOMUTLAR
END LOOP;

Örnek WHILE kullanımı aşağıdaki gibidir.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    WHILE v_sayi < 10 LOOP
        DBMS_OUTPUT.put_line('Komut ' ||v_sayi || '. defa çalıştırıldı.');
        v_sayi := v_sayi + 1;
    END LOOP;
END;

FOR

Blok içerisinde yer alan komutların önceden belirlenmiş bir sayı kadar çalıştırılması için kullanılır.

FOR SAYAC IN BASLANGIC .. BITIS LOOP
   -- KOMUTLAR
END LOOP;

Örnek FOR kullanımı aşağıdaki gibidir.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    FOR v_sayi IN 1 .. 10 LOOP
        DBMS_OUTPUT.put_line('Komut ' ||v_sayi || '. defa çalıştırıldı.');
    END LOOP;
END;

Sayı aralığı özel bir aralık olabilir.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    FOR v_sayi IN 100 .. 110 LOOP
        DBMS_OUTPUT.put_line(v_sayi);
    END LOOP;
END;

FOR döngüsünde yer alan başlangıç ve bitişi ters olarak yapmak için REVERSE anahtar kelimesi kullanılır.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    FOR v_sayi IN REVERSE 100 .. 110 LOOP
        DBMS_OUTPUT.put_line(v_sayi);
    END LOOP;
END;

GOTO

Komut akışını daha önceden belirlenmiş bir alana-etikete yönlendirmek için kullanılır.

GOTO etiket_adi;

Etiket-alan tanımı aşağıdaki gibi yapılır.

<<etiket_adi>>;

Örnek GOTO kullanımı aşağıdaki gibidir.

BEGIN
    GOTO ikinci_komut;

    <<ilk_komut>>
    DBMS_OUTPUT.put_line('ilk_komut');
    GOTO son_komut;

    <<ikinci_komut>>
    DBMS_OUTPUT.put_line('ikinci_komut');
    GOTO ilk_komut;

    <<son_komut>>
    DBMS_OUTPUT.PUT_LINE('son_komut');
END;

GOTO ile aşağıdaki gibi döngü oluşturulabilir.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    <<dongu>>
    IF v_sayi < 10 THEN
        DBMS_OUTPUT.put_line('Komut ' ||v_sayi || '. defa çalıştırıldı.');
        v_sayi := v_sayi +1;
        GOTO dongu;
    END IF;
END;

NOT: GOTO komut akışını karmaşık hale getirdiğinden kullanımı tavsiye edilmez.

Döngü kontrol

Döngülerin çalıştırılması sırasında döngüyü sonlandırmak veya belirli bir adımı atlamak için EXIT ve CONTINUE anahtar kelimeleri kullanılır.

EXIT

Döngüden çıkış yapmak için kullanılır.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    FOR v_sayi IN 1 .. 10 LOOP
        DBMS_OUTPUT.put_line('Komut ' ||v_sayi || '. defa çalıştırıldı.');
        EXIT;
    END LOOP;
END;

Koşul belirlemek için WHEN anahtar kelimesi kullanılabilir.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    FOR v_sayi IN 1 .. 10 LOOP
        DBMS_OUTPUT.put_line('Komut ' ||v_sayi || '. defa çalıştırıldı.');
        EXIT WHEN v_sayi > 4;
    END LOOP;
END;

CONTINUE

Döngü adımlarını atlamak için kullanılır.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    FOR v_sayi IN 1 .. 10 LOOP
        CONTINUE;
        DBMS_OUTPUT.put_line('Komut ' ||v_sayi || '. defa çalıştırıldı.');
    END LOOP;
END;

Koşul belirlemek için WHEN anahtar kelimesi kullanılabilir.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    FOR v_sayi IN 1 .. 10 LOOP
        CONTINUE WHEN v_sayi > 3;
        DBMS_OUTPUT.put_line('Komut ' ||v_sayi || '. defa çalıştırıldı.');
    END LOOP;
END;

Belirli bir aralık için çeşitli operatörler kullanılabilir.

SET SERVEROUTPUT ON;
DECLARE
    v_sayi PLS_INTEGER := 1;
BEGIN
    FOR v_sayi IN 1 .. 10 LOOP
        CONTINUE WHEN v_sayi < 3 OR v_sayi > 5 ;
        DBMS_OUTPUT.put_line('Komut ' ||v_sayi || '. defa çalıştırıldı.');
    END LOOP;
END;

NOT: CONTINUE anahtar kelimesi komutların başına eklenmesi gerekir. Aksi halde komutlar çalıştırıldıktan sonra adım atlama işlem gerçekleşir.

GOTO

Döngüden çıkış için GOTO anahtar kelimesi de kullanılabilir.

NOT: GOTO komut akışını karmaşık hale getirdiğinden kullanımı tavsiye edilmez.

PL/SQL Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!