Oracle PL/SQL IF THEN ELSE Оператор: ELSIF, NESTED-IF

Что такое заявления о принятии решений?

Заявления о принятии решений – это те, кто будет решать вопросы управления потоком SQL заявления, основанные на условиях. Это дает программисту лучший контроль над предотвращением выполнения определенного кода (диаграмма 1) или выбором желаемого кода на основе условия (диаграмма 2). Ниже приведено графическое изображение «Заявления о принятии решения».

Диаграмма заявления о принятии решения
Диаграмма заявления о принятии решения

Типы заявлений о принятии решений:

Oracle предоставляет следующие типы заявлений о принятии решений.

  • IF-THEN
  • ЕСЛИ-ТО-ИНАЧЕ
  • ЕСЛИ-ТО-ЭЛСИФ
  • Вложенный-ЕСЛИ
  • Кейсы
  • ПОИСК ДЕЛА

ЕСЛИ-ТО Заявление

Оператор IF-THEN в основном используется для выполнения определенного раздела кодов только тогда, когда условие удовлетворено.

Условие должно дать результат Логический (Верно/Неверно). Это базовый условный оператор, который позволяет ORACLE выполнить/пропустить определенный фрагмент кода на основе заранее определенных условий.

Синтаксис операторов IF THEN:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • В приведенном выше синтаксисе за ключевым словом «IF» будет следовать условие, которое оценивается как «ИСТИНА» или «ЛОЖЬ».
  • Элемент управления выполнит только если условие возвращается .
  • В случае условия оценивается как тогда SQL пропустит , и он начнет выполнять код рядом с блоком «END IF».

Примечание: Всякий раз, когда условие оценивается как «NULL», SQL воспринимает «NULL» как «FALSE».

Пример 1: В этом примере мы собираемся напечатать сообщение, когда число больше 100. Для этого мы выполним следующий код

Чтобы напечатать сообщение, когда число имеет значение больше 100, мы выполняем следующий код.

DECLARE 
a NUMBER :=10;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > 100 ) THEN
dbms_output.put_line('a is greater than 100'); 
END IF;
dbms_output.put_line(‘Program completed.');
END;
/

Code Объяснение:

  • Code Строка 2: Объявление переменной 'a' как переменной типа 'NUMBER' и инициализация её значением '10'.
  • Code Строка 4: Вывод сообщения «Программа запущена».
  • Code Строка 5: Проверка условия: больше ли значение переменной 'a', чем '100'.
  • Code Строка 6: Если 'a' больше '100', то будет выведено сообщение «a больше 100». Если 'a' меньше или равно 100, то условие не выполняется, поэтому указанное выше сообщение о выводе игнорируется.
  • Code строка 8: Вывод сообщения «Программа завершена».

Code Выход:

Program started.
Program completed.

Пример 2: В этом примере мы собираемся напечатать сообщение, если в данном алфавите присутствуют английские гласные (A, E, I, O, U).

Чтобы напечатать сообщение, когда данный символ является гласным, мы выполняем следующий код.

DECLARE 
a CHAR(1) :=’u’;
BEGIN
IF UPPER(a) in ('A’,'E','I','0','U' ) THEN 
dbms_output.put_line(‘The character is in English Vowels');
END IF;
END;
/

Code Объяснение:

  • Code строка 2: Объявление переменной «a» как «CHAR» типа данных размера «1» и инициализация ее значением «u».
  • Code строка 4: Проверка условия наличия в списке переменной «a» («A», «E», «I», «O», «U»).
  • Перед сравнением значение «a» было преобразовано в верхний регистр, чтобы сравнение было нечувствительным к регистру.
  • Code строка 5: Если в списке присутствует «а», то будет напечатано утверждение «Символ состоит из английских гласных». Если условие не выполнено, эта программа не выдаст никакого вывода, поскольку вне блока IF-THEN мы не выдавали никаких операторов печати.

Code Выход:

The character is in English Vowels

Оператор IF-THEN-ELSE

  • Оператор IF-THEN-ELSE в основном используется для выбора между двумя альтернативами на основе условия.
  • Ниже приведено синтаксическое представление оператора IF-THEN-ELSE.

Синтаксис операторов IF-THEN-ELSE:

IF <condition: returns Boolean>
THEN
	-executed only if the condition returns TRUE
	<action_blockl>
ELSE
	-execute if the condition failed (returns FALSE)
	<action_block2>
END if;
  • В приведенном выше синтаксисе за ключевым словом «IF» будет следовать условие, которое оценивается как «ИСТИНА» или «ЛОЖЬ».
  • Элемент управления выполнит только если условие возвращается .
  • В случае условия оценивается как тогда SQL выполнится .
  • В любом случае будет выполнен один из двух блоков действий.

Примечание: Всякий раз, когда условие оценивается как «NULL», SQL воспринимает «NULL» как «FALSE».

Пример 1: В этом примере мы собираемся напечатать сообщение о том, является ли данное число нечетным или четным.

DECLARE 
a NUMBER:=11;
BEGIN
dbms_output.put_line (‘Program started');
IF( mod(a,2)=0) THEN 
dbms_output.put_line('a is even number' ); 
ELSE
dbms_output.put_line('a is odd number1); 
END IF;
dbms_output.put_line (‘Program completed.’);
END;
/

Code Объяснение:

  • Code Строка 2: Объявление переменной 'a' как переменной типа 'NUMBER' и инициализация её значением '11'.
  • Code Строка 4: Вывод сообщения «Программа запущена».
  • Code строка 5: Проверка условия, равно ли 0 модулю переменной 'a', умноженному на '2'.
  • Code строка 6: Если '0', то будет выведено сообщение "a — четное число".
  • Code строка 7: Если значение модуля не равно '0', то условие возвращает значение. Таким образом, будет выведено сообщение «a — нечётное число».
  • Code строка 10: Вывод сообщения «Программа завершена»

Code Выход:

Program started.
a is odd number
Program completed.

Оператор IF-THEN-ELSIF

  • Оператор IF-THEN-ELSIF в основном используется там, где необходимо выбрать одну альтернативу из множества альтернатив, где каждая альтернатива имеет свои собственные условия, которые необходимо выполнить.
  • Первые условия, которые возвращаются будет выполнено, а остальные условия будут пропущены.
  • Оператор IF-THEN-ELSIF может содержать блок «ELSE». Этот блок «ELSE» будет выполнен, если ни одно из условий не выполнено.

Внимание: блок ELSE не является обязательным в этом условном операторе. Если блока ELSE нет и ни одно из условий не удовлетворено, контроллер пропустит весь блок действий и начнет выполнять оставшуюся часть кода.

Синтаксис операторов IF-THEN-ELSIF:

IF <conditionl: returns Boolean>
THEN
-executed only if the condition returns TRUE <
action_blockl>
ELSIF <condition2 returns Boolean> <
action_block2>
ELSIF <condition3:returns Boolean> <
action_block3>
ELSE —optional 
<action_block_else>
END if;
  • В приведенном выше синтаксисе элемент управления выполнит только если условие1 возвращает .
  • Если условие 1 не удовлетворено, контроллер проверит условие 2.
  • Контроллер выйдет из оператора IF в следующих двух случаях.
    • Когда контроллер обнаружил какое-либо условие, которое возвращает . В этом случае будет выполнен соответствующий action_block, и контроллер выйдет из этого блока IF-операторов и начнет выполнение оставшегося кода.
    • Если ни одно из условий не удовлетворено, контроллер then выполнит блок ELSE, если он присутствует, а затем выйдет из оператора IF.

Примечание: Всякий раз, когда условие оценивается как «NULL», SQL воспринимает «NULL» как «FALSE».

Пример 1: Без блока ELSE

В этом примере мы собираемся напечатать оценку на основе заданных оценок без условия else (оценка >= 70 Оценка A, отметка >=40 и отметка<70 Оценка B, отметка >=35 и отметка<40 Оценка C).

DECLARE
mark NUMBER :=55;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’);
ELSIF(mark >= 40 AND mark < 70) THEN
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN
dbms_output.put_line(‘Grade C’);
END IF;
dbms_output.put_line(‘Program completed.’); 
END;
/

Code Объяснение:

  • Code Строка 2: Объявление переменной 'mark' как объекта типа 'NUMBER' и инициализация её значением '55'.
  • Code Строка 4: Вывод сообщения «Программа запущена».
  • Code строка 5: Проверка условия 1, больше или равно ли значение 'mark' значению 70.
  • Code строка 7: Поскольку условие 1 не выполнено, проверяется условие 2 '70>mark>=40'.
  • Code строка 8: Condition2 возвращает Следовательно, будет напечатано сообщение «Оценка B».
  • Code строка 12: Выводится сообщение «Программа завершена».
  • В этом случае условие3 «отметка < 35» будет пропущено, поскольку контроллер обнаружил одно условие, которое возвращает до состояния3.

Code Выход:

Program started.
Grade B
Program completed.

Пример 2: С блоком ELSE

В этом примере мы собираемся напечатать оценку на основе заданных оценок с условием else (отметка >= 70 Оценка A, отметка >=40 и отметка<70 Оценка B, отметка >=35 и отметка<40 Оценка C, иначе «Нет оценок»).

DECLARE
mark NUMBER :=25;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’); 
ELSIF(mark >= 40 AND mark < 70) THEN 
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN 
dbms_output.put_line(‘Grade C);
ELSE
dbms_output.put_line(‘No Grade’);
END IF;
dbms_output.put_line(‘Program completed.' ); 
END;
/

Code Объяснение:

  • Code Строка 2: Объявление переменной 'mark' как объекта типа 'NUMBER' и инициализация её значением '25'.
  • Code Строка 4: Вывод сообщения «Программа запущена».
  • Code строка 5: Проверка условия 1, больше или равно ли значение 'mark' значению 70.
  • Code строка 7: Поскольку условие 1 не выполнено, проверяется условие 2 '70>mark>=40'.
  • Code строка 8: Поскольку условие 2 не выполнено, проверяется условие 3 '40>mark>=35'.
  • Code Строка 11: Поскольку все условия не выполнены, управление проверит наличие блока ELSE и выведет сообщение «Оценка отсутствует» из блока ELSE.
  • Code строка 14: Выводится сообщение «Программа завершена».

Code Выход:

Program started.
No Grade 
Program completed.

Оператор NESTED-IF

  • Оператор NESTED-IF в основном позволяет программистам помещать одно или несколько условий «IF» внутри другого условия «IF». кроме обычных заявлений.
  • Каждое условие «IF» должно иметь отдельный оператор «END IF», который отмечает конец области действия этого конкретного условия. .
  • Оператор IF будет рассматривать ближайший оператор END IF как конечную точку для этого конкретного условия.
  • Графическое представление NESTED-IF показано на диаграмме ниже.

Оператор NESTED-IF

Оператор NESTED-IF

IF <conditionl: returns Boolean>
THEN
	—executed only if the condition returns TRUE
	<action block1 starts>
	IF <condition2: returns Boolean>
	THEN
	<action_block2>
	END IF; —END IF corresponds to condition2
<action_blockl ends>
END IF; —END IF corresponds to condition1

Объяснение синтаксиса:

  • В приведенном выше синтаксисе внешний IF содержит еще один оператор IF в своем блоке действий.
  • Условие1 возвращает , то управление будет выполняться и проверяет условие1.
  • Если условие2 также возвращает , затем также будет исполнен.
  • В случае условия2 оценивается как тогда SQL пропустит .

Здесь мы увидим пример вложенного if –

Пример вложенного оператора If: наибольшее из трех чисел

В этом примере мы собираемся напечатать наибольшее из трех чисел, используя оператор Nested-If. Числа будут назначены в части объявления, как вы можете видеть в приведенном ниже коде, т.е. Number= 10,15 и 20, а максимальное число будет получено с использованием вложенных операторов if.

DECLARE 
a NUMBER :=10; 
b NUMBER :=15; 
c NUMBER :=20;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > b)THEN
/*Nested-if l */
	dbms_output.put_line(’Checking Nested-IF 1'); 
	IF( a > c ) THEN
	dbms_output.put_line(‘A is greatest’); 
	ELSE
	dbms_output.put_line(‘C is greatest’); 
	END IF;
ELSE
/*Nested-if2 */
	dbms_output.put_line('Checking Nested-IF 2' ); 
	IF( b > c ) THEN
	dbms_output.put_line(’B is greatest' ); 
	ELSE
	dbms_output.put_line(’C is greatest' ); 
	END IF;
END IF;
dbms_output.put_line(‘Program completed.’ );
END;
/

Code Объяснение:

  • Code Строка 2: Объявление переменной 'a' как переменной типа 'NUMBER' и инициализация её значением '10'.
  • Code Строка 3: Объявление переменной 'b' как переменной типа 'NUMBER' и инициализация её значением '15'.
  • Code Строка 4: Объявление переменной 'c' как переменной типа 'NUMBER' и инициализация её значением '20'.
  • Code строка 6: Вывод сообщения «Программа запущена» (строка 6).
  • Code строка 7: Проверка условия 1, больше ли 'a', чем 'b' (строка 7).
  • Code строка 10: Если 'a' больше 'b', то условие в 'nested-if 1' проверит, больше ли 'a' 'c' (строка 10).
  • Code строка 13: Если 'a' по-прежнему больше, то будет выведено сообщение 'A — наибольшее' (строка 11). В противном случае, если условие 2 не выполняется, то будет выведено сообщение 'C — наибольшее' (строка 13).
  • Code строка 18: Если условие condition1 возвращает false, то условие в 'nested-if 2' проверит, больше ли 'b', чем 'c' (строка 18).
  • Code строка 21: Если 'b' больше 'c', то будет выведено сообщение 'B — наибольшее' (строка 19), в противном случае, если условие 2 не выполняется, то будет выведено сообщение 'C — наибольшее' (строка 21).
  • Code строка 24: Вывод сообщения «Программа завершена» (строка 24).

Вывод кода:

Program started.
Checking Nested-IF 2
C is greatest
Program completed.

Резюме

В этой главе мы изучили различные утверждения о принятии решений, их синтаксис и примеры. В таблице ниже дано краткое изложение различных условных операторов, которые мы обсуждали.

ТИП ОПИСАНИЕ ИСПОЛЬЗОВАНИЕ
IF-THEN Проверяет логическое условие, будет ли выполняться код TRUE в блоке THEN. Чтобы пропустить/выполнить определенный код в зависимости от условия.
ЕСЛИ-ТО-ИНАЧЕ Проверяет логическое условие: будет ли выполнен код TRUE в блоке THEN, будет ли выполнен ложный код в блоке ELSE. Наиболее уместен в состоянии «ТО ИЛИ ТО».
ЕСЛИ-ТО-ЭЛСИФ Проверяет логическое условие в последовательном порядке. Будет выполнен первый блок в последовательности, который возвращает условие TRUE. Если ни одно из условий последовательности не истинно, то выполняется код в блоке «ELSE». Чаще всего используется для выбора из более чем двух альтернатив.
Вложенный-ЕСЛИ Разрешает один или несколько операторов IF-THEN или IF-THEN-ELSIF внутри другого оператора(ов) IF-THEN или IF-THEN-ELSIF. В основном используется в ситуации вложенных условий.

Подведем итог этой публикации следующим образом: