CASE Изявление в Oracle PL/SQL с примери

⚡ Умно обобщение

PL/SQL CASE операторът избира една алтернатива от няколко въз основа на селектор, подобно на 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“ е алтернатива, която има и един .
  • Избира се клаузата „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, за която изразът връща 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, SUBTRACT и 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.

Сравнение на СЛУЧАЙ и ТЪРСЕЕН СЛУЧАЙ

И двете форми избират един клон, но се различават по начина, по който се избира клонът, както е обобщено по-долу.

Тип Descriptйон употреба
CASE Подобно на АКО-ТОГДА-ЕЛСИФ оператор. За избор на алтернативата се използва „селектор“ вместо булев израз. Използва се за избор от няколко алтернативи с помощта на селектор.
ТЪРСЕН СЛУЧАЙ CASE оператор без действителен селектор. Вместо това, той съдържа условието (което се оценява като TRUE или FALSE), което избира алтернативата. Използва се за избор от повече от две алтернативи, най-вече с условия за диапазон.

Въпроси и Отговори

Един прост CASE сравнява една стойност на селектор с всяка стойност WHEN. Търсеният CASE няма селектор и оценява пълно условие във всяка WHEN, така че обработва диапазони и съставни тестове.

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

Изявление CASE поражда изключението CASE_NOT_FOUND, ако няма съвпадения на клон и няма ELSE. Добавянето на ELSE, дори празно NULL действие, избягва тази грешка по време на изпълнение.

Да. Когато разклоненията сравняват един израз с фиксирани стойности, изкуственият интелект може да пренапише веригата като по-изчистен CASE. Проверете резултата, тъй като CASE без ELSE се държи различно от липсващ ELSIF.

CASE операторът изпълнява по един блок с действия за всеки клон и завършва с END CASE. CASE изразът връща една стойност и завършва с END, така че може да бъде присвоен на променлива или използван в SQL.

Обобщете тази публикация с: