Oracle PL / SQL IF THEN ELSE Заявление: ELSIF, NESTED-IF

Содержание:

Anonim

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

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

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

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

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

  • ЕСЛИ-ТО
  • ЕСЛИ-ТО-ЕЩЕ
  • ЕСЛИ-ТО-ЭЛЬСИФ
  • NESTED-IF
  • ДЕЛО
  • ИСКАЛИ СЛУЧАЙ

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

  • Введение в заявления о принятии решений
  • IF-THEN заявление
  • IF-THEN-ELSE Заявление
  • IF-THEN-ELSIF Заявление
  • Заявление NESTED-IF

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

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

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

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

IF THEN-executed only if the condition returns TRUEEND if;
  • В приведенном выше синтаксисе за ключевым словом IF будет следовать условие, которое оценивается как TRUE / FALSE.
  • Элемент управления выполнит , только если условие вернет .
  • Если условие оценивается как , тогда SQL пропустит и начнет выполнение кода, следующего за блоком END IF.

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

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

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

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

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

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

Вывод кода:

Program started.Program completed. 

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

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

DECLAREa CHAR(1) :=’u’;BEGINIF UPPER(a) in ('A’,'E','I','0','U' ) THENdbms_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: Если в списке присутствует 'a', то будет напечатано выражение «Этот символ в английских гласных». Если условие не выполнено, эта программа не выдаст никакого вывода, так как вне блока IF-THEN мы не выдавали никаких операторов печати.

Вывод кода:

The character is in English Vowels

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

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

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

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • В приведенном выше синтаксисе за ключевым словом IF будет следовать условие, которое оценивается как TRUE / FALSE.
  • Элемент управления выполнит , только если условие вернет .
  • Если условие оценивается как , тогда SQL выполнит .
  • В любом случае будет выполнен один из двух блоков действий.

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

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

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_output.put_line('a is odd number1);END IF;dbms_output.put_line (‘Program completed.’);END;/

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

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

Вывод кода:

Program started.a is odd numberProgram completed. 

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

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

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

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

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • В приведенном выше синтаксисе элемент управления выполнит , только если условие1 вернет .
  • Если условие 1 не выполняется, контроллер проверяет условие 2.
  • Контроллер выйдет из IF-оператора в следующих двух случаях.
    • Когда контроллер обнаружил какое-либо условие, возвращающее <ИСТИНА>. В этом случае будет выполнен соответствующий блок action_block, и контроллер выйдет из этого блока IF-операторов и начнет выполнение оставшегося кода.
    • Если ни одно из условий не выполнено, тогда контроллер выполнит блок ELSE, если он присутствует, а затем выйдет из IF-оператора.

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

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

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

DECLAREmark NUMBER :=55;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_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: Condtition2 возвращает <ИСТИНА>, следовательно, будет напечатано сообщение «Оценка B».
  • Строка кода 12: печать оператора «Программа завершена».
  • В этом случае условие3 'mark <35' будет пропущено, поскольку контроллер обнаружил одно условие, которое возвращает <ИСТИНА> перед условием 3.

Вывод кода:

Program started.Grade BProgram completed.

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

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

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

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

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

Вывод кода:

Program started.No GradeProgram completed.

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

  • Оператор NESTED-IF в основном позволяет программистам помещать одно или несколько условий IF в другого условия IF, кроме обычных операторов.
  • Каждое условие «IF» должно иметь отдельный оператор «END IF», который отмечает конец области действия этого конкретного .
  • Оператор «IF» будет рассматривать ближайший оператор «END IF» как конечную точку для этого конкретного условия.
  • Графическое представление NESTED-IF показано ниже на диаграмме.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Объяснение синтаксиса:
  • В приведенном выше синтаксисе внешний IF содержит еще один оператор IF в своем блоке действий.
  • Условие1 возвращает <ИСТИНА>, тогда управление будет выполнять <блок_действия1> и проверять условие 2.
  • Если condition2 также возвращает , то также будет выполнен.
  • В случае, если условие2 оценивается как , тогда SQL пропустит .

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

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

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

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

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

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

Вывод кода:

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

Резюме

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

ТИП

ОПИСАНИЕ

ИСПОЛЬЗОВАНИЕ

ЕСЛИ-ТО

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

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

ЕСЛИ-ТО-ЕЩЕ

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

Наиболее подходит для условий «ЭТО ИЛИ ЭТО».

ЕСЛИ-ТО-ЭЛЬСИФ

Проверяет логическое условие в последовательном порядке. Будет выполнен первый блок в последовательности, возвращающей условие ИСТИНА. Если ни одно из условий в последовательности не является ИСТИННЫМ, то выполняется код в блоке «ELSE».

В основном используется для выбора из более чем двух альтернатив.

NESTED-IF

Разрешает один или несколько операторов IF-THEN или IF-THEN-ELSIF внутри других операторов IF-THEN или IF-THEN-ELSIF.

В основном используется в ситуации вложенного состояния.