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

Зміст:

Anonim

Що таке заяви про прийняття рішень?

Оператори, що приймають рішення - це ті, хто буде приймати рішення про управління потоками операторів SQL на основі умов. Це дає програмісту кращий контроль за запобігання виконанню певного коду (діаграма 1) або вибору бажаного коду на основі умови (діаграма 2). Нижче наведено зображення "Заяви про прийняття рішень".

Діаграма прийняття рішень

Види заяв щодо прийняття рішень:

Oracle пропонує такі типи заяв щодо прийняття рішень.

  • ЯКЩО ТОДІ
  • ЯКЩО-ТОГА-ІНШЕ
  • IF-THEN-ELSIF
  • ВГНІДЕНО-ЯКЩО
  • СПРАВА
  • ШУКАНА СПРАВА

У цьому підручнику ви дізнаєтесь-

  • Вступ до заяв, що приймають рішення
  • IF-THEN Заява
  • IF-THEN-ELSE Заява
  • IF-THEN-ELSIF Заява
  • Заява NESTED-IF

IF-THEN Заява

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

Умова повинна дати логічне значення (True / False). Це основний умовний оператор, який дозволить 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: Перевірка умови, чи є змінна "a" більшою, ніж "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').
  • Значення '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 немає і жодна умова не виконується, тоді контролер пропустить весь блок дій і почне виконувати решту частини коду.

Синтаксис для тверджень 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

У цьому прикладі ми збираємось надрукувати оцінку на основі заданих оцінок без будь-якої іншої умови (позначка> = 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 пропустить .

Тут ми побачимо приклад вкладеного If -

Приклад заяви про вкладеність - якщо найбільше з трьох чисел

У цьому прикладі ми збираємось надрукувати найбільше з трьох чисел за допомогою оператора Nested-If. Номери будуть присвоєні в частині оголошень, як ви можете бачити в коді нижче, тобто Number = 10,15 і 20, і максимальна кількість буде отримана за допомогою вкладених операторів.

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", тоді умова в "вкладеному-якщо 1" перевірить, чи більше "a" більше, ніж "c" (рядок 10).
  • Рядок коду 13: Якщо все-таки "а" більше, тоді надрукується повідомлення "А найбільше" (рядок 11). В іншому випадку, якщо умова2 не вдається, буде надруковано "C - найбільше" (рядок 13).
  • Рядок коду 18: Якщо умова1 повертає значення false, тоді умова в 'вкладеному-якщо 2' перевірить, чи більше 'b' більше, ніж 'c' (рядок 18).
  • Кодовий рядок 21: Якщо "b" більше, ніж "c", тоді буде надруковано повідомлення "B - найбільше" (рядок 19), інакше, якщо умова2 не вдається, буде надруковано "C - найбільше" (рядок 21).
  • Код рядок 24: Друк виписки "Програма виконана" (рядок 24).

Вивід коду:

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

Резюме

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

ТИП

ОПИС

ВИКОРИСТАННЯ

ЯКЩО ТОДІ

Перевіряє логічну умову, якщо буде виконано код TRUE в блоці 'THEN'.

Щоб пропустити, / виконати певний код на основі умови.

ЯКЩО-ТОГА-ІНШЕ

Перевіряє булеву умову, якщо буде виконано код TRUE в блоці 'THEN', якщо виконано помилковий код у блоці 'ELSE'.

Найбільш доречний в умовах "ЦЕ-АБО-ТО".

IF-THEN-ELSIF

Перевіряє булеву умову в послідовному порядку. Буде виконано перший блок у послідовності, який повертає умову TRUE. Якщо жодна з умов послідовності не відповідає TRUE, тоді виконується код у блоці 'ELSE'.

Використовується для вибору з двох варіантів.

ВСТУПЕНО-ЯКЩО

Дозволяє один або більше операторів IF-THEN або IF-THEN-ELSIF усередині іншого оператора IF-THEN або IF-THEN-ELSIF.

В основному використовується в ситуації вкладеного стану.