Эффективное программирование на PL/SQL - Когда выполнять нечего, выполняем CONTINUE
ОГЛАВЛЕНИЕ
Когда выполнять нечего, выполняем CONTINUE
Наряду со всеми своими возможностями до настоящего времени в PL/SQL была упущена одна важная часть грамматики: как показать, что ничего делать не надо, а надо перейти в конец цикла и продолжить его выполнение.
В Oracle Database 11 g в PL/SQL есть новая конструкция CONTINUE, которая используется в цикле. Это предложение перемещает логику в конец цикла, а затем на начало цикла. Вот небольшой пример, который показывает, как управление передаётся на конец цикла, когда счётчик не кратен 10.
begin
for ctr in 1..100 loop
continue when mod(ctr,10) != 0;
dbms_output.put_line ('ctr='//ctr);
end loop;
end;
/
Результат:
ctr=10
ctr=20
ctr=30
... и так далее ...
Другой вариант CONTINUE - это использование Названия Цикла.
begin
<<OuterLoop>>
for outer in 1..10 loop
dbms_output.put_line ('-> outer='//outer);
for inner in 1..10 loop
continue OuterLoop when mod(inner,3) = 0;
dbms_output.put_line ('..-> inner='//inner);
end loop;
end loop;
end;
/
Результат:
-> outer=1
..-> inner=1
..-> inner=2
-> outer=2
..-> inner=1
..-> inner=2
-> outer=3
..-> inner=1
..-> inner=2
... и так далее ...
Вместо использования предопределённой конструкции, такой как mod(inner,3), можно использовать функцию, которая выполняет некоторое вычисление.
begin
<<OuterLoop>>
for outer in 1..10 loop
dbms_output.put_line ('-> outer='//outer);
for inner in 1..10 loop
continue OuterLoop when (myfunc = 1);
dbms_output.put_line ('..-> inner='//inner);
end loop;
end loop;
end;
/
Излишне говорить, что эту конструкцию можно использовать только внутри цикла, где она имеет смысл. Если попытаться использовать её снаружи цикла, то появится ошибка компиляции.