Метки циклов в 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.