Заявление CASE в Oracle PL/SQL с примерами

⚡ Умное резюме

Оператор CASE в PL/SQL выбирает один из нескольких вариантов на основе селектора, подобно оператору IF-THEN-ELSIF, но более понятный. Простой оператор CASE сопоставляет значение селектора, в то время как оператор CASE с поиском оценивает условие в каждом предложении WHEN и выполняет первое истинное из них.

  • 🔀 Цель: Функция CASE выбирает один блок действий из многих, используя селектор вместо цепочки логических значений.
  • 🎯 Селектор: Выражение CASE вычисляется один раз и сравнивается с каждым значением WHEN.
  • 🔎 Поиск по делу: Добавляет полное условие в каждый оператор WHEN и выполняет первое истинное условие.
  • 🧮 Любой тип: В качестве селектора может выступать переменная, число или арифметическое выражение.
  • 🛟 Иначе: Дополнительный блок ELSE выполняется, если не найдено альтернативного варианта.
  • 🔚 КОНЕЦ СЛУЧАЯ: Обязательный оператор END CASE закрывает оператор.
  • 🇧🇷 Удобно для SQL: В отличие от оператора IF, оператор CASE можно использовать и непосредственно внутри SQL-запросов.

Заявление CASE в Oracle PL/SQL

Что такое CASE-заявление?

Оператор CASE аналогичен оператору IF-THEN-ELSIF; он выбирает один из вариантов на основе условия из доступных.

  • В операторе CASE для выбора последовательности используется «селектор», а не логическое выражение.
  • Значение выражения в операторе CASE рассматривается как селектор.
  • Выражение может быть любого типа (арифметическое, с переменными и т. д.).
  • Каждому варианту присваивается определенное предопределенное значение (селектор), и выполняется тот вариант, значение селектора которого совпадает со значением условного выражения.
  • В отличие от IF-THEN-ELSIF, оператор CASE также может использоваться в операторах SQL.
  • Блок ELSE в операторе CASE содержит последовательность действий, которые будут выполнены, если ни один из вариантов не выбран.

Синтаксис

CASE (expression)
WHEN <value1> THEN action_block1;
WHEN <value2> THEN action_block2;
WHEN <value3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • В приведенном выше синтаксисе выражение возвращает значение любого типа.
  • Каждый пункт «КОГДА» представляет собой альтернативный вариант, имеющий и ан .
  • Выбирается условие 'WHEN', значение которого соответствует выражению, и его выполнено.
  • Блок 'ELSE' является необязательным и содержит Выполнить, если нет подходящих альтернатив.
  • «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;
/

Code объяснение

  • Code Строка 2: Объявление переменной 'a' как 'NUMBER' и инициализация её значением '55'.
  • Code строка 3: Объявление переменной 'b' как 'NUMBER' и инициализация её значением '5'.
  • Code строка 4: Объявление переменной 'arth_operation' как 'VARCHAR2' размером 20 и инициализация её значением 'MULTIPLY'.
  • Code Строка 6: Вывод сообщения «Программа запущена».
  • Code Строка 7: Оператор CASE проверяет значение выражения. Здесь значение 'arth_operation' равно 'MULTIPLY', которое рассматривается как селектор.
  • Code Строка 10: Предложение WHEN со значением 'MULTIPLY' соответствует селектору, поэтому контроллер выбирает этот блок действий и выводит 'Умножение чисел: 275'.
  • Code Строка 13: Обозначает конец оператора CASE.
  • Code строка 14: Вывод сообщения «Программа завершена».

Code Результат

Program started.
Multiplication of the numbers are: 275
Program completed.

ЗАЯВЛЕНИЕ ПОИСКАННОГО СЛУЧАЯ

Оператор CASE, в котором выполняется поиск, аналогичен оператору CASE, но вместо использования селектора для выбора альтернативы, в операторе CASE, в котором выполняется поиск, условие определяется непосредственно в предложении WHEN.

  • Выполняется первый оператор WHEN, удовлетворяющий условию, и контроллер пропускает оставшиеся варианты.

Синтаксис

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • В приведенном выше синтаксисе каждое условие WHEN имеет отдельный оператор WHEN. и .
  • Выполняется условие WHEN, для которого выражение возвращает TRUE.
  • Блок 'ELSE' является необязательным и содержит Выполнять, когда ни один из альтернативных вариантов не подходит.
  • «END» обозначает конец утверждения CASE и является обязательной частью утверждения CASE.

Пример 1: Арифметические вычисления с использованием найденного CASE

В этом примере мы выполняем арифметическое вычисление между двумя числами, 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;
/

Code объяснение

  • Code Строка 2: Объявление переменной 'a' как 'NUMBER' и инициализация её значением '55'.
  • Code строка 3: Объявление переменной 'b' как 'NUMBER' и инициализация её значением '5'.
  • Code строка 4: Объявление переменной 'arth_operation' как 'VARCHAR2' размером 20 и инициализация её значением 'DIVIDE'.
  • Code Строка 6: Вывод сообщения «Программа запущена».
  • Code Строка 7: Начинается искомое оператор CASE. Пункты ADD, SUB.TRACОператоры T и MULTIPLY пропускаются, поскольку их условия не соответствуют значению параметра 'arth_operation'.
  • Code строка 14: Выражение в предложении WHEN “arth_operation = 'DIVIDE'” выполняется и возвращает TRUE.
  • Code Строка 15: Выполняется блок действий предложения WHEN, и выводится сообщение «Деление чисел: 11».
  • Code Строка 17: Обозначает конец оператора CASE.
  • Code строка 18: Вывод сообщения «Программа завершена».

Code Результат

Program started.
Division of the numbers are: 11
Program completed.

Сравнение исходного дела и найденного исходного дела.

Обе формы выбирают одну ветвь, но различаются способом выбора ветви, как показано ниже.

Тип Описание Применение
Кейсы Как и в случае ЕСЛИ-ТО-ЭЛСИФ В данном случае для выбора альтернативы используется «селектор» вместо логического выражения. Используется для выбора из нескольких вариантов с помощью селектора.
ПОИСК ДЕЛА Оператор CASE не содержит фактического селектора. Вместо этого он содержит условие (которое оценивается как TRUE или FALSE), выбирающее альтернативный вариант. Обычно приходится выбирать из более чем двух вариантов, в основном, в зависимости от условий стрельбы.

Часто задаваемые вопросы (FAQ)

Простой оператор CASE сравнивает одно значение селектора с каждым значением оператора WHEN. Оператор CASE, в котором выполняется поиск, не имеет селектора и оценивает полное условие в каждом операторе WHEN, поэтому он обрабатывает диапазоны и составные проверки.

Да. Выражение CASE может использоваться в предложениях SELECT, WHERE или ORDER BY, что является ключевым преимуществом по сравнению с IF-THEN-ELSIF, конструкцией, которая работает только внутри блоков PL/SQL.

Оператор CASE вызывает исключение CASE_NOT_FOUND, если ни один из вариантов перехода не совпадает и отсутствует оператор ELSE. Добавление оператора ELSE, даже пустого действия NULL, позволяет избежать этой ошибки во время выполнения.

Да. Когда ветви сравнивают одно выражение с фиксированными значениями, ИИ может переписать цепочку в более понятный CASE. Проверьте результат, поскольку CASE без ELSE ведет себя иначе, чем CASE без ELSE.

Оператор CASE выполняет блок действий для каждой ветви и заканчивается на END CASE. Выражение CASE возвращает одно значение и заканчивается на END, поэтому его можно присвоить переменной или использовать в SQL.

Подведем итог этой публикации следующим образом: