CASE Заява в Oracle PL/SQL з прикладами
⚡ Розумний підсумок
Оператор CASE в PL/SQL вибирає один варіант з кількох на основі селектора, подібно до IF-THEN-ELSIF, але зрозуміліше. Простий CASE збігається зі значенням селектора, тоді як CASE, що шукається, оцінює умову в кожному реченні WHEN та виконує перший варіант, який є істинним.

Що таке оператор CASE?
Оператор CASE подібний до оператора IF-THEN-ELSIF; він вибирає один варіант на основі умови з доступних варіантів.
- В операторі CASE для вибору послідовності використовується «селектор», а не логічний вираз.
- Значення виразу в операторі CASE обробляється як селектор.
- Вираз може бути будь-якого типу (арифметичний, змінних тощо).
- Кожній альтернативі присвоюється певне заздалегідь визначене значення (селектор), і виконується альтернатива, значення селектора якої відповідає значенню умовного виразу.
- На відміну від IF-THEN-ELSIF, оператор CASE також можна використовувати в операторах SQL.
- Блок ELSE в операторі CASE містить послідовність, яка виконується, коли не вибрано жодної з альтернатив.
синтаксис
CASE (expression) WHEN <value1> THEN action_block1; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- У наведеному вище синтаксисі вираз повертає значення, яке може бути будь-якого типу.
- Кожне речення «WHEN» є альтернативою, яка має і .
- Вибрано речення 'WHEN', значення якого відповідає виразу, і його виконується.
- Блок «ІНАКШЕ» є необов'язковим і містить виконати, коли немає відповідних альтернатив.
- «END» позначає кінець оператора CASE та є обов'язковою частиною CASE.
Приклад 1: Арифметичне обчислення з використанням CASE
У цьому прикладі ми виконуємо арифметичне обчислення між двома числами, 55 та 5.
DECLARE a NUMBER := 55; b NUMBER := 5; arth_operation VARCHAR2(20) := 'MULTIPLY'; BEGIN dbms_output.put_line('Program started.'); CASE (arth_operation) WHEN 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '|| a+b ); WHEN 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '||a-b ); WHEN 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b ); WHEN 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are:'|| a/b); ELSE dbms_output.put_line('No operation action defined. Invalid operation'); END CASE; dbms_output.put_line('Program completed.'); END; /
Code Пояснення
- Code Рядок 2: Оголошення змінної 'a' як 'NUMBER' та ініціалізація її значенням '55'.
- Code рядок 3: Оголошення змінної 'b' як 'NUMBER' та ініціалізація її значенням '5'.
- Code рядок 4: Оголошення змінної 'arth_operation' як 'VARCHAR2' розміром 20 та ініціалізація її значенням 'MULTIPLY'.
- Code рядок 6: Виведення оператора «Програма запущена».
- Code Рядок 7: CASE перевіряє значення виразу. Тут значення 'arth_operation' дорівнює 'MULTIPLY', що трактується як селектор.
- Code Рядок 10: Речення WHEN зі значенням 'MULTIPLY' відповідає селектору, тому контролер вибирає цей блок дій та друкує 'Множення чисел: 275'.
- Code рядок 13: Позначає кінець оператора CASE.
- Code рядок 14: Виведення оператора «Програма завершена».
Code Вихід
Program started. Multiplication of the numbers are: 275 Program completed.
ШУКУВАНИЙ ВИПАДОК Твердження
Оператор CASE, що шукається, подібний до оператора CASE, але замість використання селектора для вибору альтернативи, умова в операторі CASE, що шукається, визначена безпосередньо в реченні WHEN.
- Виконується перша речення WHEN, яке задовольняє умову, а контролер пропускає решту альтернатив.
синтаксис
CASE WHEN <expression1> THEN action_block1; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- У наведеному вище синтаксисі кожна речення WHEN має окремий і .
- Виконується речення WHEN, для якого вираз повертає значення TRUE.
- Блок «ІНАКШЕ» є необов'язковим і містить виконати, коли жодна з альтернатив не задовольняється.
- «END» позначає кінець оператора CASE та є обов'язковою частиною CASE.
Приклад 1: Арифметичне обчислення з використанням пошукового CASE
У цьому прикладі ми виконуємо арифметичне обчислення між двома числами, 55 та 5.
DECLARE a NUMBER := 55; b NUMBER := 5; arth_operation VARCHAR2(20) := 'DIVIDE'; BEGIN dbms_output.put_line('Program started.'); CASE WHEN arth_operation = 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '||a+b ); WHEN arth_operation = 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '|| a-b); WHEN arth_operation = 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b ); WHEN arth_operation = 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are: '|| a/b ); ELSE dbms_output.put_line('No operation action defined. Invalid operation'); END CASE; dbms_output.put_line('Program completed.'); END; /
Code Пояснення
- Code Рядок 2: Оголошення змінної 'a' як 'NUMBER' та ініціалізація її значенням '55'.
- Code рядок 3: Оголошення змінної 'b' як 'NUMBER' та ініціалізація її значенням '5'.
- Code рядок 4: Оголошення змінної 'arth_operation' як 'VARCHAR2' розміром 20 та ініціалізація її значенням 'DIVIDE'.
- Code рядок 6: Виведення оператора «Програма запущена».
- Code Рядок 7: Початок шуканого оператора CASE. Речення для ADD, SUBTRACT та MULTIPLY пропускаються, оскільки їхні умови не відповідають значенню 'arth_operation'.
- Code Рядок 14: Вираз речення WHEN “arth_operation = 'DIVIDE'” виконується та повертає значення TRUE.
- Code Рядок 15: Виконується блок дій речення WHEN, і друкується «Ділення чисел: 11».
- Code рядок 17: Позначає кінець оператора CASE.
- Code рядок 18: Виведення оператора «Програма завершена».
Code Вихід
Program started. Division of the numbers are: 11 Program completed.
Порівняння СПРАВИ (CASE) та СПРАВИ З ПОШУКОМ
Обидві форми обирають одну гілку, але вони відрізняються способом вибору цієї гілки, як коротко описано нижче.
| тип | Опис | Використання |
|---|---|---|
| СПРАВА | Як IF-THEN-ELSIF оператор. Для вибору альтернативи використовується «селектор» замість логічного виразу. | Використовується для вибору з кількох альтернатив за допомогою селектора. |
| РОЗШУКАНА СПРАВА | Оператор CASE без фактичного селектора. Натомість він містить умову (яка має значення TRUE або FALSE), яка вибирає альтернативу. | Використовується для вибору з більш ніж двох альтернатив, здебільшого з умовами діапазону. |
