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