Учебники

10) PL / SQL: оператор CASE

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

Используется для выбора из более чем двух альтернатив в основном.