Oracle PL/SQL IF THEN ELSE Оператор: ELSIF, NESTED-IF
⚡ Умное резюме
Операторы принятия решений в PL/SQL определяют, какой код будет выполняться в зависимости от логического условия. Oracle Предоставляет возможности использования операторов IF-THEN, IF-THEN-ELSE, IF-THEN-ELSIF и NESTED-IF, позволяя программе пропускать блок, выбирать между двумя путями или выбирать один из множества вариантов.

Что такое заявления о принятии решений?
Утверждения, определяющие процесс принятия решений, регулируют поток данных. SQL Операторы, основанные на условиях. Они дают программисту лучший контроль над предотвращением выполнения определенного блока или выбором желаемого блока на основе условия. Ниже приведено графическое представление оператора принятия решения.

Типы формулировок, используемых для принятия решений: Oracle предоставляет следующие типы.
- IF-THEN
- ЕСЛИ-ТО-ИНАЧЕ
- ЕСЛИ-ТО-ЭЛСИФ
- Вложенный-ЕСЛИ
- Кейсы
- ПОИСК ДЕЛА
В этом руководстве рассматриваются варианты оператора IF. Формы CASE и поиск CASE рассматриваются в разделе... Оператор CASE в PL/SQL руководства.
ЕСЛИ-ТО Заявление
Оператор IF-THEN используется для выполнения определенного участка кода только тогда, когда выполняется условие. Условие должно давать результат. Логический Значение (Истинное/Ложное). Это базовое условное выражение, позволяющее Oracle Выполнить или пропустить фрагмент кода в зависимости от заданного условия.
Синтаксис операторов IF-THEN:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block> END IF;
- В приведенном выше синтаксисе за ключевым словом «IF» следует условие, которое оценивается как «TRUE» или «FALSE».
- Управление выполняет только если условие возвращается .
- Если условие оценивается как SQL пропускает и начинает выполнение кода после блока 'END IF'.
Примечание: Всякий раз, когда условие оценивается как 'NULL', SQL рассматривает 'NULL' как 'FALSE'.
Пример 1: В этом примере мы выводим сообщение, когда число превышает 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','O','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: Если символ 'a' присутствует в списке, выводится сообщение «Символ принадлежит английским гласным». Если условие не выполняется, программа не выводит никакого результата, поскольку за пределами блока IF-THEN нет оператора вывода.
Code Выход:
The character is in English Vowels
Оператор IF-THEN-ELSE
Оператор IF-THEN-ELSE используется для выбора между двумя альтернативами на основе условия. Ниже приведён синтаксис.
Синтаксис операторов IF-THEN-ELSE:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block1> ELSE -execute if the condition failed (returns FALSE) <action_block2> END IF;
- Ключевое слово «IF» сопровождается условием, которое оценивается как «TRUE» или «FALSE».
- Управление выполняется только если условие возвращается .
- Если условие оценивается как 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 number'); END IF; dbms_output.put_line ('Program completed.'); END; /
Code Объяснение:
- Code Строка 2: Объявление переменной 'a' как переменной типа 'NUMBER' и инициализация её значением '11'.
- Code Строка 4: Вывод сообщения «Программа запущена».
- Code строка 5: Проверка, равен ли модуль переменной '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 отсутствует и ни одно из условий не выполняется, контроллер пропускает все блоки действий и выполняет оставшийся код.
Синтаксис операторов IF-THEN-ELSIF:
IF <condition1: returns Boolean> THEN -executed only if the condition returns TRUE <action_block1> ELSIF <condition2: returns Boolean> THEN <action_block2> ELSIF <condition3: returns Boolean> THEN <action_block3> ELSE --optional <action_block_else> END IF;
- Управление выполняется только если условие1 возвращается .
- Если условие 1 не выполняется, контроллер проверяет условие 2, и так далее.
- Контроллер выходит из оператора IF, когда обнаруживает условие, возвращающее значение. и запускает соответствующий блок действий, или, если ни один из них не выполнен, запускается блок ELSE (если он присутствует).
Примечание: Всякий раз, когда условие оценивается как '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 'mark < 35' пропускается, поскольку условие TRUE уже было найдено.
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 строка 9: Поскольку условие 2 не выполнено, проверяется условие 3 '40 > mark >= 35'.
- Code Строка 11: Поскольку все условия не выполнены, выполняется проверка блока ELSE и выводится сообщение «Оценка отсутствует».
- Code строка 14: Вывод сообщения «Программа завершена».
Code Выход:
Program started. No Grade Program completed.
Оператор NESTED-IF
- Оператор NESTED-IF позволяет программистам размещать одно или несколько условий IF внутри другого условия IF. .
- Для каждого условия 'IF' необходимо использовать отдельный оператор 'END IF', который обозначает конец области действия данного условия. .
- В операторе 'IF' в качестве конечной точки для данного условия рассматривается ближайший оператор 'END IF'.
- Графическое представление метода NESTED-IF показано ниже.
IF <condition1: 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_block1 ends> END IF; --END IF corresponds to condition1
Объяснение синтаксиса:
- Внешний оператор IF содержит еще один оператор IF в своем блоке действий.
- Если условие1 возвращается , управление выполняется и проверяет условие 2.
- Если условие2 также возвращает , затем также выполняется.
- Если условие 2 оценивается как SQL пропускает .
Пример вложенного оператора IF: наибольшее из трех чисел. В этом примере мы выводим наибольшее из трех чисел, используя вложенный оператор 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 1 */ 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-4: Объявление переменных 'a', 'b' и 'c' как 'NUMBER' и инициализация их значениями 10, 15 и 20.
- Code Строка 6: Вывод сообщения «Программа запущена».
- Code строка 7: Проверка условия 1: больше ли 'a', чем 'b'.
- Code строка 10: Если 'a' больше 'b', вложенное условие if 1 проверяет, больше ли 'a' больше 'c'.
- Code строки 11-13: Если 'a' все еще больше, выводится 'A — наибольшее'; в противном случае выводится 'C — наибольшее'.
- Code строка 18: Если условие 1 возвращает false, вложенное условие 2 проверяет, больше ли 'b', чем 'c'.
- Code строки 19-21: Если 'b' больше 'c', выводится 'B — наибольшее значение'; в противном случае выводится 'C — наибольшее значение'.
- Code строка 24: Вывод сообщения «Программа завершена».
Вывод кода:
Program started. Checking Nested-IF 2 C is greatest Program completed.
Сравнение формулировок, используемых при принятии решений.
В таблице ниже приведено краткое описание различных рассмотренных условных операторов, чтобы в каждой конкретной ситуации можно было выбрать подходящий.
| Тип | Описание | Применение |
|---|---|---|
| IF-THEN | Проверяет логическое условие; если оно истинно, выполняется код из блока 'THEN'. | Для пропуска или выполнения определенного блока в зависимости от условия. |
| ЕСЛИ-ТО-ИНАЧЕ | Проверяет логическое условие; если оно истинно, выполняется блок 'THEN', если ложно — блок 'ELSE'. | Наиболее уместно в ситуации "то или это". |
| ЕСЛИ-ТО-ЭЛСИФ | Проверяет условия последовательно. Выполняется первый блок, вернувший TRUE. Если ни один из блоков не возвращает TRUE, выполняется блок 'ELSE'. | Раньше приходилось выбирать из более чем двух вариантов. |
| Вложенный-ЕСЛИ | Позволяет использовать один или несколько операторов IF-THEN или IF-THEN-ELSIF внутри другого оператора. | В основном используется в ситуациях с вложенными условиями. |


