Oracle Інструкція PL/SQL IF THEN ELSE: ELSIF, NESTED-IF
Що таке заяви про прийняття рішень?
Заяви про прийняття рішень – це ті, хто вирішуватиме керування потоком SQL заяви на основі умов. Це дає програмісту кращий контроль над запобіганням виконання певного коду (діаграма 1) або вибором потрібного коду на основі умови (діаграма 2). Нижче наведено графічне представлення «Заяви про прийняття рішення».

Типи заяв про прийняття рішень:
Oracle надає такі типи заяв про прийняття рішень.
- ЯКЩО ТАК
- ЯКЩО-ТО-ІНШЕ
- IF-THEN-ELSIF
- ВЛОЖЕНИЙ-ЯКЩО
- СПРАВА
- РОЗШУКАНА СПРАВА
Твердження IF-THEN
Інструкція IF-THEN в основному використовується для виконання певної частини кодів лише тоді, коли умова задовольняється.
Умова має піддаватися Boolean (Правда/Неправда). Це базовий умовний оператор, який дозволить ORACLE виконати/пропустити певний фрагмент коду на основі попередньо визначених умов.
Синтаксис операторів IF THEN:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block> END if;
- У наведеному вище синтаксисі ключове слово "ЯКЩО" супроводжуватиметься умовою, яка має значення "ІСТИНА"/"ХИБНЯ".
- Контроль виконає тільки якщо умова повертається .
- У випадку умови оцінюється до тоді SQL пропустить , і він почне виконувати код поруч із блоком "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;
/
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','0','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-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;
- У наведеному вище синтаксисі ключове слово "ЯКЩО" супроводжуватиметься умовою, яка має значення "ІСТИНА"/"ХИБНЯ".
- Контроль виконає тільки якщо умова повертається .
- У разі умови оцінюється до потім буде виконано 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 number1);
END IF;
dbms_output.put_line (‘Program completed.’);
END;
/
Code Пояснення:
- Code Рядок 2: Оголошення змінної 'a' типу даних 'NUMBER' та ініціалізація її значенням '11'.
- Code рядок 4: Виведення оператора «Програма запущена».
- Code Рядок 5: Перевірка умови, чи модуль змінної 'a' за '2' дорівнює 0.
- 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 є необов’язковим у цьому умовному операторі. Якщо немає блоку 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;
- У наведеному вище синтаксисі елемент керування виконає лише якщо повертається умова1 .
- Якщо умова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; /
Code Пояснення:
- Code Рядок 2: Оголошення змінної 'mark' типу даних 'NUMBER' та ініціалізація її значенням '55'.
- Code рядок 4: Виведення оператора «Програма запущена».
- Code Рядок 5: Перевірка умови1, чи є 'mark' більшим або рівним 70.
- Code рядок 7: Оскільки умова1 не виконана, то перевіряється умова2 '70>mark>=40'.
- Code рядок 8: Умова2 повертає , отже, буде надруковано повідомлення «Оцінка B».
- Code рядок12: Виведення оператора «Програма завершена».
- У цьому випадку умова3 «мітка < 35» буде пропущено, оскільки контролер знайшов одну умову, яка повертає перед умовою3.
Code вихід:
Program started. Grade B Program completed.
Приклад 2: З блоком 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 рядок 8: Оскільки умова2 не виконана, то перевіряється умова3 '40>mark>=35'.
- Code рядок 11: Оскільки всі умови не виконані, керування тепер перевірятиме наявність блоку ELSE та виведе повідомлення «Немає оцінки» з блоку ELSE.
- Code рядок14: Виведення оператора «Програма завершена».
Code вихід:
Program started. No Grade Program completed.
Інструкція NESTED-IF
- Інструкція NESTED-IF дозволяє програмістам розміщувати одну чи більше умов «ЯКЩО» всередині іншої умови «ЯКЩО». крім звичайних заяв.
- Кожна умова «ЯКЩО» повинна мати окремий оператор «КІНЦІ ЯКЩО», який позначає кінець області дії цієї конкретної .
- Оператор «IF» розглядатиме найближчий оператор «END IF» як кінцеву точку для цієї конкретної умови.
- Графічний образ для NESTED-IF показаний на діаграмі нижче.
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 оцінюється як тоді SQL пропустить .
Тут ми побачимо приклад вкладеного If –
Приклад вкладеного оператора If: найбільше з трьох чисел
У цьому прикладі ми збираємося надрукувати найбільше з трьох чисел за допомогою оператора Nested-If. Числа будуть призначені в частині оголошення, як ви можете бачити в коді нижче, тобто Number= 10,15, 20 і XNUMX, а максимальне число буде отримано за допомогою вкладених операторів 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;
/
Code Пояснення:
- Code Рядок 2: Оголошення змінної 'a' типу даних 'NUMBER' та ініціалізація її значенням '10'.
- Code Рядок 3: Оголошення змінної 'b' типу даних 'NUMBER' та її ініціалізація значенням '15'.
- Code рядок 4: Оголошення змінної 'c' типу даних 'NUMBER' та її ініціалізація значенням '20'.
- Code рядок 6: Виведення оператора «Програму запущено» (рядок 6).
- Code рядок 7: Перевірка умови1, чи 'a' більше за 'b' (рядок 7).
- Code рядок 10: Якщо 'a' більше за 'b, то умова в 'nested-if 1' перевірить, чи 'a' більше за 'c' (рядок 10).
- Code рядок 13: Якщо 'a' все ще більше, то буде надруковано повідомлення 'A is greatest' (рядок 11). Інакше, якщо умова2 не виконується, то буде надруковано 'C is greatest' (рядок 13).
- Code рядок 18: Якщо умова1 повертає значення false, то умова в 'nested-if 2' перевірятиме, чи 'b' більше за 'c' (рядок 18).
- Code рядок 21: Якщо 'b' більше за 'c', то буде надруковано повідомлення 'B is greatest' (рядок 19), інакше, якщо умова2 не виконується, то буде надруковано 'C is greatest' (рядок 21).
- Code рядок 24: Виведення оператора «Програму завершено» (рядок 24).
Вихід коду:
Program started. Checking Nested-IF 2 C is greatest Program completed.
Резюме
У цьому розділі ми вивчили різні твердження прийняття рішень, їх синтаксис і приклади. У таблиці нижче наведено підсумок різних умовних тверджень, які ми обговорювали.
| TYPE | ОПИС | ВИКОРИСТАННЯ |
|---|---|---|
| ЯКЩО ТАК | Перевіряє наявність логічної умови, якщо код TRUE у блоці «THEN» буде виконано. | Щоб пропустити/виконати певний код на основі умови. |
| ЯКЩО-ТО-ІНШЕ | Перевіряє наявність логічної умови, якщо буде виконано код TRUE у блоці «THEN», якщо буде виконано хибний код у блоці «ELSE». | Найбільше підходить у стані «ЦЕ-ЧИ-ТО». |
| IF-THEN-ELSIF | Перевіряє логічні умови в послідовному порядку. Буде виконано перший блок у послідовності, який повертає умову TRUE. Якщо жодна з умов у послідовності не є TRUE, тоді виконується код у блоці «ELSE». | Зазвичай використовується для вибору з більш ніж двох альтернатив. |
| ВЛОЖЕНИЙ-ЯКЩО | Дозволяє один або кілька операторів IF-THEN або IF-THEN-ELSIF всередині інших операторів IF-THEN або IF-THEN-ELSIF. | В основному використовується у вкладених умовах. |


