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..:
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;