(6) Control Structures: CONTINUE statement





CONTINUE statement
  • CONTINUE jumps out of the current LOOP interaction and STARTS THE NEXT ONE.
  • Can be used on its own or as part of a CONTINUE WHEN

set serveroutput on 
declare 
 l_number number := 0;
begin
 for i in 1 .. 10 LOOP
                                          -- code before CONTINUE: executed
   dbms_output.put_line('Before Continue: Iteracao # '|| i ||'. MOD('||i||', 2) = '|| mod(i,2));
   CONTINUE WHEN MOD(i,2) = 0;
                                          -- If WHEN condition TRUE, code after continue: Jumped.
   dbms_output.put_line('Iteracao # '|| i ||'. MOD('||i||', 2) = '|| mod(i,2));
   l_number := l_number +1;
 end loop;
 
 dbms_output.put_line('CONTINUE WHEN:'|| l_number);
end;

Alternativelly:
set serveroutput on 
declare 
 l_number number := 0;
begin
 for i in 1 .. 10 LOOP
   IF mod(i,2) = 0 THEN 
     CONTINUE;
   END IF;
   dbms_output.put_line('Iteracao # '|| i ||'. MOD('||i||', 2) = '|| mod(i,2));
   l_number := l_number +1;
 end loop;

  • Before the CONTINUE statement, the same behavior could be implemented with IF, GOTO or EXCEPTIONS..:
-- Implementing the same behavior using Exception:
set serveroutput on 
declare 
 e_continue exception;
 ln number :=0;
begin 
 for i in 1 .. 10 loop
  begin
   if mod(i,2) != 0 then
     raise e_continue;
   end if;
    dbms_output.put_line('Iteracao # '|| i ||'. MOD('||i||', 2) = '|| mod(i,2));
    ln := ln + 1;   
  exception
   when e_continue then
     null;
  end;
 end loop;
 dbms_output.put_line('EXCEPTION: ' || ln);

set serveroutput on 
declare 
 ln number :=0;
begin
 ln := 0;
 FOR i IN 1 .. 10 LOOP
    IF MOD(i,2) != 0 THEN
      dbms_output.put_line('Iteracao # '|| i ||'. MOD('||i||', 2) = '|| mod(i,2));
      ln := ln + 1;   
    END IF;
  END LOOP;
  dbms_output.put_line('IF       : ' || ln);
end;

set serveroutput on 
declare 
 ln number :=0;
begin
  ln := 0;
  FOR i IN 1 .. 10 LOOP
    IF MOD(i,2) = 0 THEN
      GOTO label_continue;
    END IF;
    dbms_output.put_line('Iteracao # '|| i ||'. MOD('||i||', 2) = '|| mod(i,2));
    ln := ln + 1;   

    << label_continue >>
    NULL;
  END LOOP;
  dbms_output.put_line('GOTO     : ' || ln);
end;

No comments:

Post a Comment