CASE Изявление в Oracle PL/SQL с примери
Какво е изявление CASE?
Операторът 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', която съответства на стойността на израза, и съответното ще бъдат изпълнени.
- Блокът „ELSE“ е незадължителен, който съдържа който трябва да се изпълни, когато нито една от алтернативите не съответства на стойността на израза.
- 'END' маркира края на оператора CASE и е задължителна част от CASE.
Пример 1: Аритметично изчисляване с малки и малки букви
В този пример ще направим аритметично изчисление между две числа 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 има отделен и .
- Клаузата WHEN, за която изразът връща TRUE, ще бъде изпълнена.
- Блокът „ELSE“ е незадължителен, който съдържа който трябва да се изпълни, когато никоя от алтернативите не удовлетворява.
- '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.
Oбобщение
ТИП | ОПИСАНИЕ | ИЗПОЛЗВАНЕ |
---|---|---|
CASE | Подобно АКО-ТОГДА-ЕЛСИФ изявление. Използва се „СЕЛЕКТОР“ за избор на алтернативи вместо булев израз. | Използва се за избор от няколко алтернативи чрез „SELECTOR“ |
ТЪРСЕН СЛУЧАЙ | Изявление CASE без действителен „SELECTOR“. Вместо това, той съдържа действителното условие (което се оценява като TRUE/FALSE), което ще избере алтернативите. | Използва се предимно за избор от повече от две алтернативи. |