Что такое CASE Statement?
Оператор 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' как тип данных '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: 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' как тип данных 'NUMBER' и инициализация ее значением '55'.
- Строка кода 3: Объявление переменной «b» как типа данных «ЧИСЛО» и инициализация ее значением «5».
- Строка кода 4: Объявление переменной arth_operation как тип данных VARCHAR2 размера 20 и инициализация ее значением DIVIDE.
- Строка кода 6: Печать оператора «Программа запущена».
- Строка кода 7: начинается инструкция SEARCHED CASE. Код со строки 8 по строку 13 пропускается, поскольку значение их селектора (ADD, SUBTRACT, MULTIPLY) не совпадает со значением '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». Вместо этого он содержит фактическое условие (которое оценивается как ИСТИНА / ЛОЖЬ), которое выберет альтернативы. |
В основном используется для выбора из более чем двух альтернатив. |