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.