Учебники

9) Заявления о принятии решений

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

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

Схема принятия решения

Схема принятия решения

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

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

  • IF-THEN
  • IF-THEN-ELSE
  • IF-THEN-ELSIF
  • NESTED-IF
  • ДЕЛО
  • ИСКАЛИ СЛУЧАЙ

В этом уроке вы узнаете

IF-THEN Заявление

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

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

Синтаксис IF THEN утверждений:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • В приведенном выше синтаксисе за ключевым словом «IF» будет следовать условие, которое оценивается как «TRUE» / «FALSE».
  • Элемент управления выполнит <action_block>, только если условие вернет <TRUE>.
  • В случае, когда условие оценивается как <FALSE>, SQL пропустит <action_block> и начнет выполнять код рядом с блоком «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: если «а» больше «100», то будет напечатано «а больше 100». Если «а» меньше или равно 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» будет следовать условие, которое оценивается как «TRUE» / «FALSE».
  • Элемент управления выполнит <action_block1>, только если условие вернет <TRUE>.
  • Если условие оценивается как <FALSE>, тогда SQL выполнит <action_block2>.
  • В любом случае будет выполнен один из двух блоков действий.

Примечание: всякий раз, когда условие оценивается как «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’.
  • Строка кода 6: если «0», то будет напечатано «четное число».
  • Строка кода 7: если значение модуля не равно ‘0’, тогда условие возвращает <FALSE>, поэтому будет напечатано сообщение «a is add number».
  • Строка кода 10: печать справки «Программа выполнена»

Вывод кода:

Program started.
a is odd number
Program completed.   

IF-THEN-ELSIF Заявление

  • Оператор IF-THEN-ELSIF в основном используется там, где одна альтернатива должна быть выбрана из набора альтернатив, где каждая альтернатива имеет свои собственные условия, которые должны быть выполнены.
  • Первые условия, которые возвращают <TRUE>, будут выполнены, а остальные условия будут пропущены.
  • Оператор 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;
  • В приведенном выше синтаксисе элемент управления будет выполнять <action_block1>, только если условие1 возвращает <TRUE>.
  • Если условие 1 не выполняется, то контроллер проверит условие 2.
  • Контроллер выйдет из оператора IF в следующих двух случаях.
    • Когда контроллер обнаружил любое условие, которое возвращает <ИСТИНА>. В этом случае будет выполнен соответствующий action_block, и контроллер выйдет из этого блока операторов IF и начнет выполнять оставшийся код.
    • Если ни одно из условий не выполнено, тогда контроллер выполнит ELSE-блок, если он присутствует, и выйдет из оператора IF.

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

Пример 1: без блока 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, больше или равно «знак» 70.
  • Строка кода 7: поскольку условие1 не выполнено, проверяется условие2 ’70> mark> = 40 ‘.
  • Строка кода 8: condtition2 возвращает <TRUE>, поэтому будет напечатано сообщение «Оценка B».
  • Строка кода 12: печать справки «Программа выполнена».
  • В этом случае условие «mark <35» будет пропущено, поскольку контроллер обнаружил одно условие, которое возвращает <TRUE> перед условием 3.

Вывод кода:

Program started.
Grade B
Program completed.

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

В этом примере мы собираемся напечатать оценку на основе данных оценок с условием else (mark> = 70 Grade A, mark> = 40 и mark <70 Grade B, mark> = 35 и mark <40 Grade 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, больше или равно «знак» 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» внутри <action_block> условия «IF», ​​отличных от обычных операторов.
  • Каждое условие ‘IF’ должно иметь отдельный оператор ‘END IF’, который отмечает конец области действия данного конкретного <action_block>.
  • Оператор «IF» будет рассматривать ближайший оператор «END IF» в качестве конечной точки для этого конкретного условия.
  • Наглядное представление для NESTED-IF показано ниже диаграммы.

PL / SQL заявления о принятии решений

PL / SQL заявления о принятии решений

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 также возвращает <ИСТИНА>, то <действие_блок2> также будет выполнено.
  • В случае, если условие2 имеет значение <FALSE>, SQL пропустит <action_block2>.

Здесь мы собираемся увидеть пример Nested If —

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

В этом примере мы собираемся напечатать наибольшее из трех чисел, используя инструкцию Nested-If. Числа будут назначены в части объявления, как вы можете видеть в приведенном ниже коде, то есть Number = 10,15 и 20, и максимальное число будет получено с помощью операторов nested-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 ismost» (строка 21).
  • Строка кода 24: печать выписки «Программа выполнена» (строка 24).

Вывод кода:

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

Резюме

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

ТИП

ОПИСАНИЕ

ПРИМЕНЕНИЕ

IF-THEN

Проверяет логическое условие, если будет выполнен ИСТИННЫЙ код в блоке THEN.

Чтобы пропустить / выполнить определенный код в зависимости от условия.

IF-THEN-ELSE

Checks for a Boolean condition, if TRUE code in ‘THEN’ block will be executed, if false code in ‘ELSE’ block is executed.

Most appropriate in ‘THIS-OR-THAT’ condition.

IF-THEN-ELSIF

Checks for a Boolean condition in sequential order. The first block in the sequence which returns TRUE condition will be executed. If none of the conditions in the sequence is TRUE, then code in ‘ELSE’ block is executed.

Used to choose from more than two alternatives mostly.

NESTED-IF

Allows one or more IF-THEN or IF-THEN-ELSIF statement inside another IF-THEN or IF-THEN-ELSIF statement(s).

Mainly used in nested condition situation.