Що таке заява CASE?
Оператор CASE схожий на оператор IF-THEN-ELSIF, який вибирає одну альтернативу на основі умови з доступних варіантів.
- У операторі CASE для вибору послідовності використовується "селектор", а не булевий вираз.
- Значення виразу в операторі CASE буде розглядатися як селектор.
- Вираз може бути будь-якого типу (арифметичний, змінні тощо)
- Кожній альтернативі присвоюється певне заздалегідь визначене значення (селектор), а альтернатива зі значенням селектора, яке відповідає значенню умовного виразу, буде виконана.
- На відміну від IF-THEN-ELSIF, вираз CASE також може використовуватися в операторах SQL.
- Блок ELSE в операторі CASE містить послідовність, яку потрібно виконати, коли жодна з альтернатив не вибрана.
Синтаксис:
CASE (expression)WHENTHEN action_blockl;WHEN THEN action_block2;WHEN THEN action_block3;ELSE action_block_default;END CASE;
- У наведеному вище синтаксисі вираз поверне значення, яке може бути будь-якого типу (змінної, числа тощо).
- Кожне речення 'WHEN' розглядається як альтернативи, які мають <значення> та
. - Буде вибрано речення 'WHEN', яке відповідає значенню, як значення виразу, і буде виконано відповідний
. - Блок 'ELSE' є необов'язковим, який містить
, який потрібно виконати, коли жодна з альтернатив не відповідає значенню виразу. - "END" означає кінець виписки CASE, і вона є обов'язковою частиною CASE.
Приклад 1: Арифметичне обчислення з використанням регістру
У цьому прикладі ми будемо робити арифметичне обчислення між двома числами 55 і 5.
DECLAREa NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='MULTIPLY’;BEGINdbms_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' як типу 'ЧИСЛО' та ініціалізація її значенням '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: 275Program completed.
ПОШУКОВА СПРАВА Заява
Оператор SEARCHED CASE схожий на оператор CASE, а не за допомогою селектора для вибору альтернативи, SEARCHED CASE безпосередньо матиме вираз, визначений у реченні WHEN.
- Перший пункт WHEN, який задовольняє умові, буде виконаний, а контролер пропустить інші альтернативи.
Синтаксис:
CASEWHENTHEN action_blockl;WHEN THEN action_block2;WHEN 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';BEGINdbms_output.put_line(‘Program started.' );CASEWHEN 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' як типу 'ЧИСЛО' та ініціалізація її значенням '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: 11Program completed.
Резюме
ТИП | ОПИС | ВИКОРИСТАННЯ |
---|---|---|
СПРАВА |
Подібно до твердження IF-THEN-ELSIF. 'SELECTOR' використовується для вибору альтернатив замість булевого виразу. |
Використовується для вибору з декількох альтернатив за допомогою 'SELECTOR' |
ШУКАНА СПРАВА |
Оператор CASE без фактичного 'SELECTOR'. Натомість він містить фактичну умову (яка має значення TRUE / FALSE), яка вибере альтернативи. |
Використовується для вибору з двох варіантів. |