›  ›  ›  › Метки циклов в PL/SQL Oracle

Метки циклов в PL/SQL Oracle

Циклу можно присвоить имя при помощи метки. Метка цикла в PL/SQL имеет стандартный формат:

<<имя_метки>>

Метка располагается непосредственно перед командой LOOP:

<<all_emps>>
FOR emp_rec IN emp_cur
LOOP
   ...
END LOOP;

Эту же метку можно указать и после ключевых слов END LOOP, как в следующем примере:

<<year_loop>>
WHILE year_number <= 1995
LOOP
   <<month_loop>>
   FOR month_number IN 1 .. 12
   LOOP
      ...
   END LOOP month_loop;
   year_number := year_number + 1;
END LOOP year_loop;

Метки циклов могут пригодиться в нескольких типичных ситуациях:

Если вы написали очень длинный цикл с множеством вложенных циклов (допустим, начинающийся в строке 50, завершается в строке 725 и содержащий 16 вложенных циклов), используйте метку цикла для того, чтобы явно связать его конец с началом. Визуальная пометка поможет при отладке и сопровождении программы; без нее будет трудно уследить, какая команда LOOP соответствует каждой из команд END LOOP.

Метку цикла можно использовать для уточнения имени управляющей переменной цикла (записи или счетчика), что также упрощает чтение программы:

<<year_loop>>
  FOR year_number IN 1800..1995
  LOOP
     <<month_loop>>
     FOR month_number IN 1 .. 12
     LOOP
        IF year_loop.year_number = 1900 THEN ... END IF;
     END LOOP month_loop;
  END LOOP year_loop;

При использовании вложенных циклов метки упрощают чтение кода и повышают эффективность их выполнения. При желании выполнение именованного внешнего цикла можно прервать при помощи команды EXIT с заданной в нем меткой цикла:

EXIT метка_цикла;
EXIT метка_цикла WHEN условие;

Но обычно применять метки циклов подобным образом не рекомендуется, так как они ухудшают структуру логики программы (по аналогии с GOTO) и усложняют отладку. Если вам потребуется использовать подобный код, лучше изменить структуру цикла, а возможно, заменить его простым циклом или WHILE.

Метки: , , .

Записи по теме

Добавить комментарий

Ваш адрес email не будет опубликован.