Что такое CASE Statement?
Оператор 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 рассматривается как альтернатива, в которой есть <value> и <action_block>.
- Предложение WHEN, соответствующее значению выражения, будет выбрано, и будет выполнено соответствующее действие <action_block>.
- Блок ELSE является необязательным и содержит <action_block_default>, который необходимо выполнить, когда ни одна из альтернатив не соответствует значению выражения.
- «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; /
Объяснение кода:
- Строка кода 2: объявление переменной «a» как типа данных «NUMBER» и инициализация ее значением «55».
- Строка кода 3: объявление переменной ‘b’ как типа данных ‘NUMBER’ и инициализация ее значением ‘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 имеет отдельные <expression> и <action_block>.
- Предложение WHEN, для которого выражение возвращает TRUE, будет выполнено.
- Блок ELSE является необязательным и содержит <action_block_default>, который необходимо выполнить, когда ни одна из альтернатив не удовлетворяет.
- «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’ как типа данных ‘NUMBER’ и инициализация ее значением ‘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: 11 Program completed.
Резюме
ТИП | ОПИСАНИЕ | ПРИМЕНЕНИЕ |
---|---|---|
ДЕЛО |
Аналогично утверждению IF-THEN-ELSIF. «SELECTOR» используется для выбора альтернатив вместо логического выражения. |
Используется для выбора из нескольких альтернатив, используя «SELECTOR» |
ИСКАЛИ СЛУЧАЙ |
Оператор CASE без фактического «SELECTOR». Вместо этого он содержит фактическое условие (которое оценивается как ИСТИНА / ЛОЖЬ), которое выберет альтернативы. |
Используется для выбора из более чем двух альтернатив в основном. |