CASE Заява в Oracle PL/SQL з прикладами
Що таке оператор CASE?
Оператор CASE подібний до оператора IF-THEN-ELSIF, який вибирає одну альтернативу на основі умови з доступних варіантів.
- Для вибору послідовності оператор CASE використовує «селектор», а не логічний вираз.
- Значення виразу в операторі CASE розглядатиметься як селектор.
- Вираз може бути будь-якого типу (арифметичний, змінні тощо)
- Кожній альтернативі призначається певне попередньо визначене значення (селектор), а альтернатива зі значенням селектора, яке відповідає значенню умовного виразу, буде виконано.
- На відміну від IF-THEN-ELSIF, оператор CASE також можна використовувати в операторах SQL.
- Блок ELSE в інструкції CASE містить послідовність, яку потрібно виконати, якщо не вибрано жодної з альтернатив.
синтаксис
CASE (expression) WHEN <valuel> THEN action_blockl; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- У наведеному вище синтаксисі вираз повертатиме значення, яке може бути будь-якого типу (змінна, число тощо).
- Кожне речення WHEN розглядається як альтернатива, яка має і .
- Буде вибрано речення WHEN, яке відповідає значенню виразу, і відповідне буде виконано.
- Блок 'ELSE' необов'язковий, який містить який потрібно виконати, якщо жодна з альтернатив не відповідає значенню виразу.
- «END» позначає кінець оператора CASE, і це обов’язкова частина CASE.
Приклад 1: Арифметичне обчислення з використанням регістру
У цьому прикладі ми збираємося виконати арифметичні обчислення між двома числами 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; /
Пояснення коду
- Кодовий рядок 2: Оголошення змінної «a» як типу даних «NUMBER» та ініціалізація її значенням «55».
- Кодовий рядок 3: Оголошення змінної "b" як типу даних "ЧИСЛО" та ініціалізація її значенням "5".
- Рядок коду 4: Оголошення змінної "arth_operation" як типу даних "VARCHAR2" розміром 20 та ініціалізація її значенням "MULTIPLY".
- Кодовий рядок 6: Друк оператора «Програма запущена».
- Кодовий рядок 7: CASE перевіряє значення виразу. У цьому випадку значенням змінної 'arth_operation' є 'MULTIPLY'. Тепер це значення буде розглядатися як селектор для цього оператора CASE.
- Рядок коду 10: речення WHEN зі значенням «MULTIPLY» збігається зі значенням селектора, тому контролер вибере цей блок action_block і надрукує повідомлення «Множення чисел становить: 275».
- Рядок коду 13: позначає кінець оператора CASE.
- Рядок коду 14: Друк повідомлення «Програма завершена».
Виведення коду
Program started. Multiplication of the numbers are: 275 Program completed.
ШУКУВАНИЙ ВИПАДОК Твердження
Оператор SEARCHED CASE подібний до оператора CASE, замість того, щоб використовувати селектор для вибору альтернативи, SEARCHED CASE безпосередньо матиме вираз, визначений у реченні WHEN.
- Перший пункт WHEN, який задовольняє умову, буде виконано, а контролер пропустить решта альтернатив.
синтаксис
CASE WHEN <expression1> THEN action_blockl; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- У наведеному вище синтаксисі кожне речення WHEN має окремий і .
- Речення WHEN, для якого вираз повертає значення TRUE, буде виконано.
- Блок 'ELSE' необов'язковий, який містить який потрібно виконати, коли жодна з альтернатив не задовольняє.
- 'END' позначає кінець оператора CASE і є обов'язковою частиною CASE.
Приклад 1: Арифметичне обчислення з пошуковим регістром
У цьому прикладі ми збираємося виконати арифметичні обчислення між двома числами 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; /
Пояснення коду
- Кодовий рядок 2: Оголошення змінної «a» як типу даних «NUMBER» та ініціалізація її значенням «55».
- Кодовий рядок 3: Оголошення змінної "b" як типу даних "ЧИСЛО" та ініціалізація її значенням "5".
- Рядок коду 4: Оголошення змінної "arth_operation" як типу даних "VARCHAR2" розміром 20 та ініціалізація її значенням "DIVIDE".
- Кодовий рядок 6: Друк оператора «Програма запущена».
- Кодовий рядок 7: починається оператор SEARCHED CASE. Код із рядка 8 до рядка 13 пропускається, оскільки значення селектора (ДОДАТИ, ВІДНІМАТИ, МНОЖИТИ) не збігається зі значенням «arth_operation».
- Рядок коду 14: Вираз пропозиції WHEN “arth_operation = 'DIVIDE'” виконано, і вираз повертає TRUE.
- Рядок коду 15: Action_block пропозиції WHEN буде виконано, і буде надруковано повідомлення «Ділення чисел: 11».
- Кодовий рядок 17: позначає кінець оператора CASE.
- Кодовий рядок 18: Друк заяви «Програма завершена».
Виведення коду
Program started. Division of the numbers are: 11 Program completed.
Підсумки
TYPE | ОПИС | ВИКОРИСТАННЯ |
---|---|---|
СПРАВА | Як і в IF-THEN-ELSIF заява. «SELECTOR» використовується для вибору альтернатив замість логічного виразу. | Використовується для вибору з кількох альтернатив за допомогою «SELECTOR» |
РОЗШУКАНА СПРАВА | Оператор CASE без фактичного "SELECTOR". Натомість він містить фактичну умову (яка оцінюється як TRUE/FALSE), яка вибере альтернативи. | Зазвичай використовується для вибору з більш ніж двох альтернатив. |