Заявление 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» как типа данных «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 имеет отдельный и .
- Предложение 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» как типа данных «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.
Итого
ТИП | ОПИСАНИЕ | ИСПОЛЬЗОВАНИЕ |
---|---|---|
Кейсы | Похожий на что ЕСЛИ-ТО-ЭЛСИФ заявление. «СЕЛЕКТОР» используется для выбора альтернатив вместо логического выражения. | Используется для выбора из нескольких альтернатив с помощью «SELECTOR». |
ПОИСК ДЕЛА | Оператор CASE без фактического SELECTOR. Вместо этого он содержит фактическое условие (которое оценивается как ИСТИНА/ЛОЖЬ), которое выберет альтернативы. | Чаще всего используется для выбора из более чем двух альтернатив. |