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

Съдържание:

Anonim

Какво представляват декларациите за вземане на решения?

Операторите за вземане на решения са тези, които ще решат контрола на потока на SQL изрази въз основа на условията. Това дава на програмиста по-добър контрол за предотвратяване на изпълнението на определен код (диаграма 1) или избора на желания код въз основа на условието (диаграма 2). По-долу е изобразено изображението на „Декларация за вземане на решения“.

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

Видове декларации за вземане на решения:

Oracle предоставя следните типове изявления за вземане на решения.

  • АКО-ТОГАВА
  • АКО-ТОГАВА ДРУГО
  • IF-THEN-ELSIF
  • NESTED-IF
  • СЛУЧАЙ
  • ТЪРСЕН СЛУЧАЙ

В този урок ще научите -

  • Въведение в декларациите за вземане на решения
  • АКО-ТОГА Декларация
  • IF-THEN-ELSE Изявление
  • IF-THEN-ELSIF Изявление
  • Декларация NESTED-IF

АКО-ТОГА Декларация

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

Условието трябва да даде логическо (True / False). Това е основна условна инструкция, която ще позволи на ORACLE да изпълни / пропусне определена част от кода въз основа на предварително дефинираните условия.

Синтаксис на АД ТОГАВА изявления:

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: Ако „a“ е по-голямо от „100“, тогава ще бъде отпечатано „a е по-голямо от 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“).
  • Стойността на „а“ е преобразувана в главни букви, преди да се направи сравнение, за да се направи сравнение без регистрация.
  • Кодов ред 5: Ако в списъка присъства „а“, тогава ще се отпечата изявлението „Символът е на английски гласни“. Ако условието е неуспешно, тогава тази програма няма да даде никакви резултати, тъй като извън блока 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', тогава ще бъде отпечатано "а е четно число".
  • Кодов ред 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-statement и ще започне да изпълнява останалия код.
    • Когато никое от условията не е изпълнено, тогава контролерът ще изпълни ELSE блок, ако е налице, след което ще излезе от IF-инструкцията.

Забележка: Всеки път, когато условието изчислява на „NULL“, тогава SQL ще третира „NULL“ като „FALSE“.

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

В този пример ще отпечатаме оценката въз основа на дадените оценки без друго условие (марка> = 70 степен А, марка> = 40 и марка <70 степен Б, марка> = 35 и марка <40 степен С).

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: Деклариране на променливата „марка“ като тип данни „НОМЕР“ и инициализиране със стойност „55“.
  • Код ред 4: Отпечатване на изявлението „Програмата е стартирана“.
  • Кодов ред 5: Проверка на условието1, независимо дали 'марката' е по-голяма или равна 70.
  • Кодов ред 7: Тъй като условие1 е неуспешно, тогава се проверява условието2 '70> марка> = 40 '.
  • Кодов ред 8: Условието2 връща , следователно съобщението „Степен B“ ще бъде отпечатано.
  • Код ред12: Отпечатване на изявлението „Програмата е завършена“.
  • В този случай условието3 'маркировка <35' ще бъде пропуснато, тъй като контролерът намери едно условие, което връща преди условие3.

Изход на код:

Program started.Grade BProgram completed.

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

В този пример ще отпечатаме оценката въз основа на дадените оценки с условие else (марка> = 70 клас A, марка> = 40 и марка <70 степен B, марка> = 35 и марка <40 степен 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: Деклариране на променливата „марка“ като тип данни „НОМЕР“ и инициализиране със стойност „25“.
  • Код ред 4: Отпечатване на изявлението „Програмата е стартирана“.
  • Кодов ред 5: Проверка на условие 1, независимо дали „марката“ е по-голяма или равна на 70.
  • Кодов ред 7: Тъй като условие1 е неуспешно, тогава се проверява условието2 '70> марка> = 40 '.
  • Кодов ред 8: Тъй като условието2 е неуспешно, тогава се проверява условието3 '40> марка> = 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 връща , след това контролата ще изпълнява и проверява условието2.
  • Ако условието2 връща и , тогава ще бъде изпълнено и .
  • В случай, че условие2 оценява на , тогава SQL ще пропусне .

Тук ще видим пример за вложен ако -

Пример за изявление за вложени - ако: Най-голямото от три числа

В този пример ще отпечатаме най-голямото от три числа, като използваме оператора 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 is most greatest“ (ред 13).
  • Кодов ред 18: В случай, че условие1 връща false, тогава условието в „вложено-ако 2“ ще провери дали „b“ е по-голямо от „c“ (ред 18).
  • Кодов ред 21: Ако „b“ е по-голямо от „c“, тогава ще се отпечата съобщение „B е най-голямото“ (ред 19), в противен случай, ако условието2 не успее, ще се отпечата „C is greatest“ (ред 21)
  • Код ред 24: Отпечатване на изявлението „Програмата е завършена“ (ред 24).

Изход на код:

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

Обобщение

В тази глава научихме различните твърдения за вземане на решения и техния синтаксис и примери. По-долу таблицата дава резюмето на различни условни изявления, които сме обсъждали.

ТИП

ОПИСАНИЕ

УПОТРЕБА

АКО-ТОГАВА

Проверява за логическо състояние, ако TRUE кодът в блока 'THEN' ще бъде изпълнен.

За да пропуснете, / изпълнете определен код въз основа на условието.

АКО-ТОГАВА ДРУГО

Проверява за булево условие, ако TRUE кодът в блока 'THEN' ще бъде изпълнен, ако се изпълни фалшив код в блока 'ELSE'.

Най-подходящо в състояние „ТОВА ИЛИ-ТОВА“.

IF-THEN-ELSIF

Проверява за булево условие в последователен ред. Ще бъде изпълнен първият блок в последователността, който връща условието TRUE. Ако нито едно от условията в последователността не е TRUE, тогава се изпълнява код в блока 'ELSE'.

Използва се за избор от повече от две алтернативи най-вече.

NESTED-IF

Позволява един или повече изрази IF-THEN или IF-THEN-ELSIF вътре в друг израз (и) IF-THEN или IF-THEN-ELSIF.

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