Основы языка PL/SQL: использование меток

Метки в программе на языке PL/SQLМетки PL/SQL предназначены для присваивания имени определенной части программы. Синтаксис метки:

<<идентификатор>> 

Здесь идентификатор — это допустимый идентификатор PL/SQL (длиной до 30 символов и начинающийся с буквы — см. статью в блогах про  идентификаторы). Метка не имеет завершителя; она располагается непосредственно перед фрагментом кода, имя которого она определяет, даже если это простая команда NULL

BEGIN
...
<>
NULL;

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

<>
BEGIN
INSERT INTO catalog
VALUES (...);
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
NULL;
END insert_but_ignore_dups; 

Блоки часто именуют для того, чтобы код лучше читался. Давая блоку имя, вы делаете код самодокументируемым. Заодно вы еще раз задумаетесь над тем, что он делает (иногда это даже помогает найти незамеченные ошибки). Метки используются также для уточнения ссылок на элементы внешнего блока, имена которых совпадают с именами текущего (вложенного) блока. Пример:

<>
DECLARE
counter INTEGER := 0;
BEGIN
...
DECLARE
counter INTEGER := 1;
BEGIN
IF counter = outerblock.counter
THEN
...
END IF;
END;
END;

Без метки блока невозможно различить две переменные с одинаковыми именами counter (впрочем, проблема лучше решается присваиванием разных имен).

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

Хотя некоторые программы, с которыми мне довелось работать, использовали метки, последняя функция меток важнее всех трех предыдущих вместе взятых: метка может использоваться в качестве целевой точки оператора выхода из вложенных циклов EXIT:

BEGIN
<>
LOOP
LOOP
EXIT outer_loop;
END LOOP;
команда;
END LOOP;
END;

Без метки <<outer_loop>> команда EXIT осуществит выход только из внутреннего цикла, после чего будет выполнена команда, что совершенно излишне. Итак, в данном случае метка позволяла реализовать функциональность, которую в PL/SQL было бы затруднительно реализовать другим способом.

Вас заинтересует / Intresting for you:

Управление приложениями PL/SQL...
Управление приложениями PL/SQL... 4634 просмотров Stas Belkov Thu, 16 Jul 2020, 06:20:48
Встроенные методы коллекций PL...
Встроенные методы коллекций PL... 14738 просмотров sepia Tue, 29 Oct 2019, 09:54:01
Тип данных RAW в PL/SQL
Тип данных RAW в PL/SQL 12239 просмотров Doctor Thu, 12 Jul 2018, 08:41:33
Символьные функции и аргументы...
Символьные функции и аргументы... 18546 просмотров Анатолий Wed, 23 May 2018, 18:54:01
Войдите чтобы комментировать

isisisis60 аватар
isisisis60 ответил в теме #9058 5 года 10 мес. назад
Эх, лучшее изложение материала - это реальные примеры. Сразу становится все понятно.