PL/SQL Mempunyai beberapa tipe Looping (perulangan), yaitu:
- Basic Loop
- For Loop
- While Loop
- Nested Loop (Perulangan bersarang)
Label Pada Looping
Anda sanggup menunjukkan label pada Looping dengan menunjukkan tanda "<<" pada awal label dan tanda ">>" pada selesai label.Untuk lebih jelasnya, Anda sanggup pribadi mencoba kegiatan PL/SQL menyerupai di bawah ini:
DECLARE x number(1); y number(1); BEGIN << loop_luar >> FOR x IN 1..5 LOOP << loop_dalam >> FOR y IN 1..5 LOOP DBMS_OUTPUT.PUT_LINE('x adalah: '|| x || ' dan y adalah: ' || y); END LOOP loop_dalam; END loop loop_luar; END; /
Output
x adalah: 1 dan y adalah: 1 x adalah: 1 dan y adalah: 2 x adalah: 1 dan y adalah: 3 x adalah: 1 dan y adalah: 4 x adalah: 1 dan y adalah: 5 x adalah: 2 dan y adalah: 1 x adalah: 2 dan y adalah: 2 x adalah: 2 dan y adalah: 3 x adalah: 2 dan y adalah: 4 x adalah: 2 dan y adalah: 5 x adalah: 3 dan y adalah: 1 x adalah: 3 dan y adalah: 2 x adalah: 3 dan y adalah: 3 x adalah: 3 dan y adalah: 4 x adalah: 3 dan y adalah: 5 x adalah: 4 dan y adalah: 1 x adalah: 4 dan y adalah: 2 x adalah: 4 dan y adalah: 3 x adalah: 4 dan y adalah: 4 x adalah: 4 dan y adalah: 5 x adalah: 5 dan y adalah: 1 x adalah: 5 dan y adalah: 2 x adalah: 5 dan y adalah: 3 x adalah: 5 dan y adalah: 4 x adalah: 5 dan y adalah: 5 PL/SQL procedure successfully completed.
Basic Loop
Sintak DasarLOOP statement yang akan dijalankan; END LOOP;
Contoh Program #1
DECLARE x number := 10; BEGIN LOOP DBMS_OUTPUT.PUT_LINE(x); x := x + 5; IF x > 50 THEN exit; END IF; END LOOP; DBMS_OUTPUT.PUT_LINE('Hasil selesai x ialah : ' || x); END; /
Output #1:
10 15 20 25 30 35 40 45 50 Hasil selesai x ialah : 55 PL/SQL procedure successfully completed.
Selain memakai keyword "exit" untuk keluar dari looping, Anda juga sanggup memakai statement EXIT WHEN, menyerupai pola di bawah ini:
Contoh Program#2
DECLARE x number := 10; BEGIN LOOP DBMS_OUTPUT.PUT_LINE(x); x := x + 5; EXIT WHEN x > 50; END LOOP; DBMS_OUTPUT.PUT_LINE('Hasil selesai x ialah : ' || x); END; /
Output #2
10 15 20 25 30 35 40 45 50 Hasil selesai x ialah : 55 PL/SQL procedure successfully completed.
For Loop
Sintak dasarFOR counter IN initial_value .. final_value LOOP sequence_of_statements; END LOOP;
Contoh Program
DECLARE a number(2); BEGIN FOR a in 5 .. 20 LOOP dbms_output.put_line('Nilai bilangan a ialah : ' || a); END LOOP; END; /
Output:
Nilai bilangan a ialah : 5 Nilai bilangan a ialah : 6 Nilai bilangan a ialah : 7 Nilai bilangan a ialah : 8 Nilai bilangan a ialah : 9 Nilai bilangan a ialah : 10 Nilai bilangan a ialah : 11 Nilai bilangan a ialah : 12 Nilai bilangan a ialah : 13 Nilai bilangan a ialah : 14 Nilai bilangan a ialah : 15 Nilai bilangan a ialah : 16 Nilai bilangan a ialah : 17 Nilai bilangan a ialah : 18 Nilai bilangan a ialah : 19 Nilai bilangan a ialah : 20 PL/SQL procedure successfully completed.
Reverse For Loop
Reverse For Loop ialah kebalikan dari For Loop. Dia akan melaksanakan perulangan secara decrement (dari yang terakhir hingga dengan yang pertama).Contoh Program
DECLARE a number(2); BEGIN FOR a IN REVERSE 5 .. 20 LOOP DBMS_OUTPUT.PUT_LINE('Nilai bilangan a ialah : ' || a); END LOOP; END; /
Output
Nilai bilangan a ialah : 20 Nilai bilangan a ialah : 19 Nilai bilangan a ialah : 18 Nilai bilangan a ialah : 17 Nilai bilangan a ialah : 16 Nilai bilangan a ialah : 15 Nilai bilangan a ialah : 14 Nilai bilangan a ialah : 13 Nilai bilangan a ialah : 12 Nilai bilangan a ialah : 11 Nilai bilangan a ialah : 10 Nilai bilangan a ialah : 9 Nilai bilangan a ialah : 8 Nilai bilangan a ialah : 7 Nilai bilangan a ialah : 6 Nilai bilangan a ialah : 5 PL/SQL procedure successfully completed.
While Loop
Sintak DasarWHILE condition LOOP statement; END LOOP;
Contoh Program
DECLARE a number(2) := 5; BEGIN WHILE a <= 15 LOOP DBMS_OUTPUT.PUT_LINE('Nilai dari a ialah : ' || a); a := a + 1; END LOOP; END; /
Output
Nilai dari a ialah : 5 Nilai dari a ialah : 6 Nilai dari a ialah : 7 Nilai dari a ialah : 8 Nilai dari a ialah : 9 Nilai dari a ialah : 10 Nilai dari a ialah : 11 Nilai dari a ialah : 12 Nilai dari a ialah : 13 Nilai dari a ialah : 14 Nilai dari a ialah : 15 PL/SQL procedure successfully completed.
Nested Loop
Nested Loop atau perulangan bersarang ialah perulangan di dalam perulangan.Sintak Dasar Nested Loop
LOOP statement1; LOOP statement2; END LOOP; END LOOP;
Sintak Dasar Nested For Loop
FOR counter1 IN initial_value1 .. final_value1 LOOP statement1; FOR counter2 IN initial_value2 .. final_value2 LOOP statements2; END LOOP; END LOOP;
Sintak Dasar Nested While Loop
WHILE condition1 LOOP statements1; WHILE condition2 LOOP statements2; END LOOP; END LOOP;
Contoh Program
DECLARE i number(3); j number(3); BEGIN i := 2; LOOP j:= 2; LOOP EXIT WHEN ((mod(i, j) = 0) or (j = i)); j := j +1; END LOOP; IF (j = i ) THEN DBMS_OUTPUT.PUT_LINE(i || ' ialah bilangan prima'); END IF; i := i + 1; EXIT WHEN i = 50; END LOOP; END; /
Output:
2 ialah bilangan prima 3 ialah bilangan prima 5 ialah bilangan prima 7 ialah bilangan prima 11 ialah bilangan prima 13 ialah bilangan prima 17 ialah bilangan prima 19 ialah bilangan prima 23 ialah bilangan prima 29 ialah bilangan prima 31 ialah bilangan prima 37 ialah bilangan prima 41 ialah bilangan prima 43 ialah bilangan prima 47 ialah bilangan prima PL/SQL procedure successfully completed.
Continue Statement
Continue statement dipakai untuk men-skip (meloncat) dari proses perulangan.Sintak Dasar
CONTINUE;
Contoh Program
Program di bawah ini akan mencetak angka 1 hingga dengan 10, kecuali angka 5.
DECLARE a number(2) := 1; BEGIN WHILE a <= 10 LOOP DBMS_OUTPUT.PUT_LINE ('Nilai dari a ialah : ' || a); a := a + 1; IF a = 5 THEN -- skip perulangan dengan memakai CONTINUE a := a + 1; CONTINUE; END IF; END LOOP; END; /
Output:
Nilai dari a ialah : 1 Nilai dari a ialah : 2 Nilai dari a ialah : 3 Nilai dari a ialah : 4 Nilai dari a ialah : 6 Nilai dari a ialah : 7 Nilai dari a ialah : 8 Nilai dari a ialah : 9 Nilai dari a ialah : 10 PL/SQL procedure successfully completed.
GO TO Statement
Sintak DasarGOTO label; .. .. << label >> statement;
Contoh Program
DECLARE a number(2) := 10; BEGIN <<label_loop>> WHILE a < 20 LOOP DBMS_OUTPUT.PUT_LINE ('Nilai dari a ialah ' || a); a := a + 1; IF a = 15 THEN a := a + 1; GOTO label_loop; END IF; END LOOP; END; /
Output
Nilai dari a ialah 10 Nilai dari a ialah 11 Nilai dari a ialah 12 Nilai dari a ialah 13 Nilai dari a ialah 14 Nilai dari a ialah 16 Nilai dari a ialah 17 Nilai dari a ialah 18 Nilai dari a ialah 19 PL/SQL procedure successfully completed.