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