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