Какво е CASE Statement?
Изразът CASE е подобен на изявлението IF-THEN-ELSIF, което избира една алтернатива въз основа на условието от наличните опции.
- Операторът CASE използва "селектор", а не булев израз, за да избере последователността.
- Стойността на израза в израза CASE ще се третира като селектор.
- Изразът може да бъде от всякакъв тип (аритметика, променливи и т.н.)
- Всяка алтернатива се присвоява с определена предварително дефинирана стойност (селектор) и алтернативата със селекторна стойност, която съответства на условната стойност на израза, ще бъде изпълнена.
- За разлика от IF-THEN-ELSIF, изявлението CASE може да се използва и в SQL изрази.
- Блокът ELSE в оператора CASE съдържа последователността, която трябва да бъде изпълнена, когато нито една от алтернативите не е избрана.
Синтаксис:
CASE (expression)WHENTHEN action_blockl;WHEN THEN action_block2;WHEN THEN action_block3;ELSE action_block_default;END CASE;
- В горния синтаксис изразът ще върне стойност, която може да бъде от всякакъв тип (променлива, число и т.н.).
- Всяка клауза „WHEN“ се третира като алтернативи, които имат <стойност> и
. - Ще бъде избрана клаузата „WHEN“, която съответства на стойността като тази на израза и ще бъде изпълнено съответното
. - Блокът "ELSE" не е задължителен, който съдържа
, който трябва да бъде изпълнен, когато никоя от алтернативите не съответства на стойността на израза. - „END“ означава края на изявлението CASE и е задължителна част от CASE.
Пример 1: Аритметично изчисление с помощта на Case
В този пример ще направим аритметично изчисление между две числа 55 и 5.
DECLAREa NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='MULTIPLY’;BEGINdbms_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“ като „НОМЕР“ тип данни и инициализиране със стойност „55“.
- Кодов ред 3: Деклариране на променливата „b“ като тип „НОМЕР“ и инициализиране със стойност „5.“
- Кодов ред 4: Деклариране на променливата 'arth_operation' като тип данни 'VARCHAR2' с размер 20 и инициализиране със стойност 'MULTIPLY'.
- Код ред 6: Отпечатване на изявлението „Програмата е стартирана“.
- Кодов ред 7: CASE проверява стойността на израза. В този случай стойността на променливата „arth_operation“ е „МНОЖЕСТВЕНО“. Тази стойност ще се третира като селектор за този CASE оператор сега.
- Кодов ред 10: Клаузата WHEN със стойност „MULTIPLY“ съвпада със стойността на селектора, следователно контролерът ще избере този action_block и ще отпечата съобщението „Умножение на числата са: 275“.
- Код ред13: Маркира края на изявлението CASE.
- Код ред 14: Отпечатване на изявлението „Програмата е завършена“.
Изход на код:
Program started.Multiplication of the numbers are: 275Program completed.
ТЪРСЕН ДЕЛО Декларация
Операторът SEARCHED CASE е подобен на изявлението CASE, вместо да използва селектора за избор на алтернатива, SEARCHED CASE ще има директно израза, дефиниран в клаузата WHEN.
- Първата клауза WHEN, която отговаря на условието, ще бъде изпълнена и контролерът ще пропусне останалите алтернативи.
Синтаксис:
CASEWHENTHEN action_blockl;WHEN THEN action_block2;WHEN 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';BEGINdbms_output.put_line(‘Program started.' );CASEWHEN 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“ като „НОМЕР“ тип данни и инициализиране със стойност „55“.
- Кодов ред 3: Деклариране на променливата „b“ като тип „НОМЕР“ и инициализиране със стойност „5“.
- Кодов ред 4: Деклариране на променливата „arth_operation“ като тип данни „VARCHAR2“ с размер 20 и инициализиране със стойност „DIVIDE“.
- Код ред 6: Отпечатване на изявлението „Програмата е стартирана“.
- Кодов ред 7: Започва изявлението SEARCHED CASE. Кодът от ред 8 до ред 13 се прескача, тъй като стойността на селектора им (ДОБАВЯНЕ, ИЗВЕЖДАНЕ, МНОЖЕСТВЕНО) не съвпада със стойността на „arth_operation“.
- Кодов ред 14: Изразът WHEN на клаузата "arth_operation = 'DIVIDE'" е изпълнен и изразът връща TRUE.
- Кодов ред 15: Action_block на клаузата WHEN ще бъде изпълнен и ще бъде отпечатано съобщението „Разделяне на числата са: 11“.
- Кодов ред 17: Маркира края на изявлението CASE.
- Кодов ред 18: Отпечатване на изявлението „Програмата е завършена“.
Изход на код:
Program started.Division of the numbers are: 11Program completed.
Обобщение
ТИП | ОПИСАНИЕ | УПОТРЕБА |
---|---|---|
СЛУЧАЙ |
Подобно на изявлението IF-THEN-ELSIF. За избор на алтернативи вместо булев израз се използва „SELECTOR“. |
Използва се за избор от няколко алтернативи, използвайки „SELECTOR“ |
ТЪРСЕН СЛУЧАЙ |
Декларация CASE без действителен 'SELECTOR'. Вместо това, той съдържа действителното състояние (което оценява на TRUE / FALSE), което ще избере алтернативите. |
Използва се за избор от повече от две алтернативи най-вече. |