CASE Изявление в Oracle PL/SQL с примери
⚡ Умно обобщение
PL/SQL CASE операторът избира една алтернатива от няколко въз основа на селектор, подобно на IF-THEN-ELSIF, но по-ясно. Простият CASE съпоставя стойност на селектор, докато търсеният CASE оценява условие във всяка WHEN клауза и изпълнява първото, което е вярно.

Какво е 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), което избира алтернативата. | Използва се за избор от повече от две алтернативи, най-вече с условия за диапазон. |
