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; /
Пояснення коду:
- Кодовий рядок 2: Оголошення змінної «a» як типу даних «NUMBER» та ініціалізація її значенням «10».
- Кодовий рядок 4: Друк оператора «Програма запущена».
- Рядок коду 5: Перевірка умови, чи змінна 'a' більша за '100'.
- Кодовий рядок 6: якщо «a» більше за «100», тоді буде надруковано «a більше за 100». Якщо «a» менше або дорівнює 100, умова не виконується, тому наведений вище оператор друку ігнорується.
- Кодовий рядок 8: Друк заяви «Програма завершена».
Вихід коду:
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; /
Пояснення коду:
- Рядок коду 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 <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; /
Пояснення коду:
- Кодовий рядок 2: Оголошення змінної «a» як типу даних «NUMBER» та ініціалізація її значенням «11».
- Кодовий рядок 4: Друк оператора «Програма запущена».
- Кодовий рядок 5: Перевірка умови, чи модуль змінної 'a' на '2' дорівнює 0.
- Рядок коду 6: якщо «0», то буде надруковано «а — парне число».
- Рядок коду 7: якщо значення модуля не дорівнює «0», тоді повертається умова , тому буде надруковано повідомлення «a — непарне число».
- Рядок коду 10: Друк повідомлення «Програма завершена»
Вихід коду:
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; /
Пояснення коду:
- Кодовий рядок 2: Оголошення змінної "mark" як типу даних "NUMBER" та ініціалізація її значенням "55".
- Кодовий рядок 4: Друк оператора «Програма запущена».
- Рядок коду 5: Перевірка умови1, чи значення 'mark' більше або дорівнює 70.
- Рядок коду 7: оскільки умова1 не вдалася, умова2 '70>mark>=40' перевіряється.
- Рядок коду 8: повертається умова2 , тому буде надруковано повідомлення «Оцінка B».
- Рядок коду 12: Друк повідомлення «Програма завершена».
- У цьому випадку умова3 «мітка < 35» буде пропущено, оскільки контролер знайшов одну умову, яка повертає перед умовою3.
Вихід коду:
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; /
Пояснення коду:
- Кодовий рядок 2: Оголошення змінної "mark" як типу даних "NUMBER" та ініціалізація її значенням "25".
- Кодовий рядок 4: Друк оператора «Програма запущена».
- Рядок коду 5: Перевірка умови 1, чи є «позначка» більше або дорівнює 70.
- Рядок коду 7: оскільки умова1 не вдалася, умова2 '70>mark>=40' перевіряється.
- Рядок коду 8: оскільки умова2 не вдалася, умова3 '40>mark>=35' перевіряється.
- Рядок коду 11: оскільки всі умови не виконуються, керування перевірить наявність блоку ELSE та надрукує повідомлення «Без оцінки» з блоку ELSE.
- Рядок коду 14: Друк повідомлення «Програма завершена».
Вихід коду:
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; /
Пояснення коду:
- Кодовий рядок 2: Оголошення змінної «a» як типу даних «NUMBER» та ініціалізація її значенням «10».
- Кодовий рядок 3: Оголошення змінної "b" як типу даних "ЧИСЛО" та ініціалізація її значенням "15".
- Рядок коду 4: Оголошення змінної «c» як типу даних «NUMBER» та ініціалізація її значенням «20».
- Рядок коду 6: Друк оператора «Програма запущена» (рядок 6).
- Кодовий рядок 7: Перевірка умови1, чи є «a» більшим за «b» (рядок 7).
- Рядок коду 10: якщо «a» більше за «b», тоді умова у «nested-if 1» перевірить, чи «a» більше за «c» (рядок 10).
- Кодовий рядок 13: якщо «a» все ще більше, тоді буде надруковано повідомлення «A є найбільшим» (рядок 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 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. | В основному використовується у вкладених умовах. |