Kontrol Perulangan Pada PL/SQL

PL/SQL Mempunyai beberapa tipe Looping (perulangan), yaitu:

  • Basic Loop
  • For Loop
  • While Loop
  • Nested Loop (Perulangan bersarang)

Label Pada Looping

Anda dapat memberikan label pada Looping dengan memberikan tanda "<<" pada awal label dan tanda ">>" pada akhir label.

Untuk lebih jelasnya, Anda dapat langsung mencoba program PL/SQL seperti 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 Dasar

LOOP
  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 akhir x adalah : ' || x);
END;
/

Output #1:

10
15
20
25
30
35
40
45
50
Hasil akhir x adalah : 55

PL/SQL procedure successfully completed.

Selain menggunakan keyword "exit" untuk keluar dari looping, Anda juga bisa menggunakan statement EXIT WHEN, seperti contoh 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 akhir x adalah : ' || x);
END;
/

Output #2

10
15
20
25
30
35
40
45
50
Hasil akhir x adalah : 55

PL/SQL procedure successfully completed.

For Loop

Sintak dasar

FOR 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 adalah : ' || a);
   END LOOP;
END;
/

Output:

Nilai bilangan a adalah : 5
Nilai bilangan a adalah : 6
Nilai bilangan a adalah : 7
Nilai bilangan a adalah : 8
Nilai bilangan a adalah : 9
Nilai bilangan a adalah : 10
Nilai bilangan a adalah : 11
Nilai bilangan a adalah : 12
Nilai bilangan a adalah : 13
Nilai bilangan a adalah : 14
Nilai bilangan a adalah : 15
Nilai bilangan a adalah : 16
Nilai bilangan a adalah : 17
Nilai bilangan a adalah : 18
Nilai bilangan a adalah : 19
Nilai bilangan a adalah : 20

PL/SQL procedure successfully completed.

Reverse For Loop

Reverse For Loop adalah kebalikan dari For Loop. Dia akan melakukan perulangan secara decrement (dari yang terakhir sampai dengan yang pertama).

Contoh Program

DECLARE
   a number(2);
BEGIN
   FOR a IN REVERSE 5 .. 20 LOOP
      DBMS_OUTPUT.PUT_LINE('Nilai bilangan a adalah : ' || a);
   END LOOP;
END;
/

Output

Nilai bilangan a adalah : 20
Nilai bilangan a adalah : 19
Nilai bilangan a adalah : 18
Nilai bilangan a adalah : 17
Nilai bilangan a adalah : 16
Nilai bilangan a adalah : 15
Nilai bilangan a adalah : 14
Nilai bilangan a adalah : 13
Nilai bilangan a adalah : 12
Nilai bilangan a adalah : 11
Nilai bilangan a adalah : 10
Nilai bilangan a adalah : 9
Nilai bilangan a adalah : 8
Nilai bilangan a adalah : 7
Nilai bilangan a adalah : 6
Nilai bilangan a adalah : 5

PL/SQL procedure successfully completed.

While Loop

Sintak Dasar

WHILE condition LOOP
 statement;
END LOOP;

Contoh Program

DECLARE
 a number(2) := 5;
BEGIN
 WHILE a <= 15 LOOP
  DBMS_OUTPUT.PUT_LINE('Nilai dari a adalah : ' || a);
  a := a + 1;
 END LOOP;
END;
/

Output

Nilai dari a adalah : 5
Nilai dari a adalah : 6
Nilai dari a adalah : 7
Nilai dari a adalah : 8
Nilai dari a adalah : 9
Nilai dari a adalah : 10
Nilai dari a adalah : 11
Nilai dari a adalah : 12
Nilai dari a adalah : 13
Nilai dari a adalah : 14
Nilai dari a adalah : 15

PL/SQL procedure successfully completed.

Nested Loop

Nested Loop atau perulangan bersarang adalah 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 || ' adalah bilangan prima');
     END IF;
     i := i + 1;
     EXIT WHEN i = 50;
  END LOOP;
END;
/

Output:

2 adalah bilangan prima
3 adalah bilangan prima
5 adalah bilangan prima
7 adalah bilangan prima
11 adalah bilangan prima
13 adalah bilangan prima
17 adalah bilangan prima
19 adalah bilangan prima
23 adalah bilangan prima
29 adalah bilangan prima
31 adalah bilangan prima
37 adalah bilangan prima
41 adalah bilangan prima
43 adalah bilangan prima
47 adalah bilangan prima

PL/SQL procedure successfully completed.

Continue Statement

Continue statement digunakan untuk men-skip (meloncat) dari proses perulangan.

Sintak Dasar

CONTINUE;

Contoh Program

Program di bawah ini akan mencetak angka 1 sampai dengan 10, kecuali angka 5.

DECLARE
   a number(2) := 1;
BEGIN
   WHILE a <= 10 LOOP
      DBMS_OUTPUT.PUT_LINE ('Nilai dari a adalah : ' || a);
       a := a + 1;
       IF a = 5 THEN
         -- skip perulangan dengan menggunakan CONTINUE
         a := a + 1;
         CONTINUE;
       END IF;
   END LOOP;
END;
/

Output:

Nilai dari a adalah : 1
Nilai dari a adalah : 2
Nilai dari a adalah : 3
Nilai dari a adalah : 4
Nilai dari a adalah : 6
Nilai dari a adalah : 7
Nilai dari a adalah : 8
Nilai dari a adalah : 9
Nilai dari a adalah : 10

PL/SQL procedure successfully completed.

GO TO Statement

Sintak Dasar

GOTO label;
..
..
<< label >>
statement;

Contoh Program

DECLARE
   a number(2) := 10;
BEGIN
   <<label_loop>>

   WHILE a < 20 LOOP
      DBMS_OUTPUT.PUT_LINE ('Nilai dari a adalah ' || a);
      a := a + 1;
      IF a = 15 THEN
         a := a + 1;
         GOTO label_loop;
      END IF;
   END LOOP;
END;
/

Output

Nilai dari a adalah 10
Nilai dari a adalah 11
Nilai dari a adalah 12
Nilai dari a adalah 13
Nilai dari a adalah 14
Nilai dari a adalah 16
Nilai dari a adalah 17
Nilai dari a adalah 18
Nilai dari a adalah 19

PL/SQL procedure successfully completed.

Share on Google Plus

About Unknown

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment
    Facebook Comment

0 comments:

Post a Comment