Заявление 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', значение которого соответствует выражению, и его выполнено.
- Блок 'ELSE' является необязательным и содержит Выполнить, если нет подходящих альтернатив.
- «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. и .
- Выполняется условие WHEN, для которого выражение возвращает TRUE.
- Блок 'ELSE' является необязательным и содержит Выполнять, когда ни один из альтернативных вариантов не подходит.
- «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, SUB.TRACОператоры T и 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 не содержит фактического селектора. Вместо этого он содержит условие (которое оценивается как TRUE или FALSE), выбирающее альтернативный вариант. | Обычно приходится выбирать из более чем двух вариантов, в основном, в зависимости от условий стрельбы. |
