CASE Заява в Oracle PL/SQL з прикладами

⚡ Розумний підсумок

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

  • 🔀 Мета: CASE вибирає один блок дій з багатьох, використовуючи селектор замість логічного ланцюжка.
  • 🎯 Селектор: Вираз CASE обчислюється один раз і порівнюється з кожним значенням WHEN.
  • 🔎 Шуканий СПРАВА: Вставляє повну умову в кожне речення WHEN та виконує першу, яка є істинною.
  • 🧮 Будь-який тип: Селектор може бути змінною, числом або арифметичним виразом.
  • 🛟 Інакше: Необов'язковий блок ELSE виконується, коли немає збігів.
  • 🔚 КІНЕЦЬ СПРАВИ: Обов'язковий оператор END CASE завершує оператор.
  • 🗄️ Зручний для SQL: На відміну від IF, CASE також можна використовувати безпосередньо всередині SQL-інструкцій.

CASE Заява в Oracle PL / SQL

Що таке оператор 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), яка вибирає альтернативу. Використовується для вибору з більш ніж двох альтернатив, здебільшого з умовами діапазону.

Поширені запитання

Простий CASE порівнює одне значення селектора з кожним значенням WHEN. Пошуковий CASE не має селектора та обчислює повну умову в кожному WHEN, тому він обробляє діапазони та складені перевірки.

Так. Вираз CASE може з'являтися в реченні SELECT, WHERE або ORDER BY, що є ключовою перевагою над IF-THEN-ELSIF, конструкцією, яка працює лише всередині блоків PL/SQL.

Оператор CASE викликає виняток CASE_NOT_FOUND, якщо немає збігів у гілках і немає ELSE. Додавання ELSE, навіть пустої дії NULL, дозволяє уникнути цієї помилки під час виконання.

Так. Коли гілки порівнюють один вираз із фіксованими значеннями, ШІ може переписати ланцюжок як чистіший CASE. Перевірте результат, оскільки CASE без ELSE поводиться інакше, ніж відсутній ELSIF.

Оператор CASE виконує блок дій для кожної гілки та завершується оператором END CASE. Вираз CASE повертає одне значення та завершується оператором END, тому його можна присвоїти змінній або використовувати в SQL.

Підсумуйте цей пост за допомогою: