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;
/

Пояснение к коду:

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

Вывод кода:

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;
/

Пояснение к коду:

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

Вывод кода:

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;
/

Пояснение к коду:

  • Строка кода 2: объявление переменной «a» как типа данных «NUMBER» и инициализация ее значением «11».
  • Строка кода 4: печать оператора «Программа запущена».
  • Строка кода 5: проверка условия, равен ли модуль переменной «a» на «2» 0.
  • Строка кода 6: Если «0», то будет напечатано «a — четное число».
  • Строка кода 7: если значение модуля не равно «0», условие возвращается. , поэтому будет напечатано сообщение «a — нечетное число».
  • Строка кода 10: печать заявления «Программа завершена».

Вывод кода:

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;
/

Пояснение к коду:

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

Вывод кода:

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;
/

Пояснение к коду:

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

Вывод кода:

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;
/

Пояснение к коду:

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