Команда NULL языка PL/SQL на примерах

Оператор Null языка PL_SQL на примереКаждая команда программы, как правило, выполняет некоторое действие. Однако бывают случаи, когда нужно просто указать компилятору PL/SQL, чтобы он не делал ничего, и тогда на помощь приходит оператор NULL. Он имеет следующий формат: 

NULL;

С чего бы команда, которая «ничего не делает», имела сложную структуру? Команда NULL состоит из ключевого слова NULL, за которым следует точка с запятой (;) — она указывает, что это команда, а не значение NULL. В программе эта команда не делает ничего, если не считать передачи управления следующей исполняемой команде. О том, для чего может понадобиться такая команда, вы узнаете ниже из моего блога.

 

Удобочитаемость кода

Иногда бывает полезно полностью исключить всякую неоднозначность, которая присутствует в командах IF, не покрывающих всех возможных случаев. Например, в команде IF может отсутствовать ключевое слово ELSE — как в следующем примере: 

IF :report_mgr.selection = 'DETAIL'
THEN
exec_detail_report;
END IF;

Что должна делать программа при выборе другого отчета вместо 'DETAIL'? Можно предположить, что ничего. Но поскольку в коде это явно не указано, кто-то может подумать, что вы просто забыли запрограммировать соответствующее действие. С другой стороны, присутствие секции ELSE, которая не делает ничего, предельно четко указывает: «Эта возможность предусмотрена, здесь действительно не должны выполняться никакие операции»:

IF :report_mgr.selection = 'DETAIL'
THEN
exec_detail_report;
ELSE
NULL; -- Ничего не делать
END IF;

Приведенный пример демонстрирует команду IF, но аналогичный принцип действует и при записи команд и выражений CASE. Если вам потребуется временно исключить весь код из функции или процедуры, но при этом оставить вызов функции или процедуры в программе, используйте команду NULL в качестве временного «заполнителя». Без нее вы не сможете откомпилировать функцию или процедуру, не содержащую ни одной строки кода.

 

Использование NULL после метки

В некоторых случаях переход к NULL позволяет избежать выполнения дополнительных команд. Большинство программистов никогда не использует GOTO, а ситуации, в которых эта команда действительно необходима, крайне редки. Но если вам когда-нибудь придется использовать команду GOTO, помните, что за меткой, к которой осуществляется переход, должна стоять хотя бы одна исполняемая команда. В следующем примере команда GOTO используется для быстрого перехода в конец программы в том случае, если состояние данных указывает, что дальнейшая обработка не требуется: 

PROCEDURE process_data (data_in IN orders%ROWTYPE,
data_action IN VARCHAR2)
IS
status INTEGER;
BEGIN
-- Первая проверка
IF data_in.ship_date IS NOT NULL
THEN
status := validate_shipdate (data_in.ship_date);
IF status != 0 THEN GOTO end_of_procedure; END IF;
END IF;
-- Вторая проверка
IF data_in.order_date IS NOT NULL
THEN
status := validate_orderdate (data_in.order_date);
IF status != 0 THEN GOTO end_of_procedure; END IF;
END IF;
... Дополнительные проверки ...
<>
NULL;
END;

При обнаружении ошибки в одном из разделов остальные проверки обходятся командой GOTO. Поскольку в конце процедуры делать ничего не нужно, но там должна находиться хотя бы одна исполняемая команда, после метки помещается NULL. Хотя последняя никаких реальных действий не выполняет, она считается исполняемым оператором.

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

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