Prohlášení CASE v Oracle PL/SQL s příklady

Co je CASE prohlášení?

Příkaz CASE je podobný příkazu IF-THEN-ELSIF, který vybírá jednu alternativu na základě podmínky z dostupných možností.

  • Příkaz CASE používá k výběru sekvence „selektor“ spíše než booleovský výraz.
  • Hodnota výrazu v příkazu CASE bude považována za selektor.
  • Výraz může být libovolného typu (aritmetický, proměnné atd.)
  • Každé alternativě je přiřazena určitá předdefinovaná hodnota (selektor) a bude provedena alternativa s hodnotou selektoru, která odpovídá hodnotě podmíněného výrazu.
  • Na rozdíl od IF-THEN-ELSIF lze příkaz CASE použít také v příkazech SQL.
  • Blok ELSE v příkazu CASE obsahuje sekvenci, kterou je třeba provést, když není vybrána žádná z alternativ.

Syntax

CASE (expression)
 WHEN <valuel> THEN action_blockl;
 WHEN <value2> THEN action_block2;
 WHEN <value3> THEN action_block3;
 ELSE action_block_default;
END CASE;
  • Ve výše uvedené syntaxi bude výraz vracet hodnotu, která může být libovolného typu (proměnná, číslo atd.).
  • Každá klauzule „WHEN“ je považována za alternativy, které mají a .
  • Bude vybrána klauzule 'WHEN', která odpovídá hodnotě výrazu, a odpovídající bude provedena.
  • Blok 'ELSE' je volitelný, který obsahuje který je třeba provést, když žádná z alternativ neodpovídá hodnotě výrazu.
  • „END“ označuje konec příkazu CASE a je povinnou součástí příkazu CASE.

Příklad 1: Aritmetický výpočet pomocí případu

V tomto příkladu provedeme aritmetický výpočet mezi dvěma čísly 55 a 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;
/

Vysvětlení kódu

  • Řádek kódu 2: Deklarace proměnné 'a' jako datového typu 'NUMBER' a její inicializace hodnotou '55'.
  • Řádek kódu 3: Deklarování proměnné 'b' jako datový typ 'NUMBER' a její inicializace hodnotou '5'.
  • Řádek kódu 4: Deklarace proměnné 'arth_operation' jako datového typu 'VARCHAR2' velikosti 20 a její inicializace hodnotou 'MULTIPLY'.
  • Řádek kódu 6: Tisk výpisu „Program spuštěn“.
  • Řádek kódu 7: CASE kontroluje hodnotu výrazu. V tomto případě je hodnota proměnné 'arth_operation' 'MULTIPLY'. Tato hodnota bude nyní považována za selektor pro tento příkaz CASE.
  • Řádek kódu 10: Klauzule WHEN s hodnotou 'MULTIPLY' se shoduje s hodnotou selektoru, proto řadič vybere tento akční_blok a vytiskne zprávu 'Násobení čísel je: 275'.
  • Řádek 13 kódu: Označuje konec příkazu CASE.
  • Řádek kódu 14: Tisk výpisu „Program dokončen“.

Výstup kódu

Program started.
Multiplication of the numbers are: 275
Program completed.

Prohlášení VYHLEDÁVANÝ PŘÍPAD

Příkaz SEARCHED CASE je podobný příkazu CASE, namísto použití selektoru k výběru alternativy bude mít SEARCHED CASE výraz přímo definovaný v klauzuli WHEN.

  • Bude provedena první klauzule WHEN, která splňuje podmínku, a řadič přeskočí zbývající alternativy.

Syntax

CASE
WHEN <expression1> THEN action_blockl; 
WHEN <expression2> THEN action_block2; 
WHEN <expression3> THEN action_block3; 
ELSE action_block_default;
END CASE;
  • Ve výše uvedené syntaxi má každá klauzule WHEN samostatný a .
  • Bude provedena klauzule WHEN, pro kterou výraz vrátí hodnotu TRUE.
  • Blok 'ELSE' je volitelný, který obsahuje které je třeba provést, když žádná z alternativ nevyhovuje.
  • „END“ označuje konec příkazu CASE a je povinnou součástí příkazu CASE.

Příklad 1: Aritmetický výpočet pomocí hledaných případů

V tomto příkladu provedeme aritmetický výpočet mezi dvěma čísly 55 a 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;
/

Vysvětlení kódu

  • Řádek kódu 2: Deklarace proměnné 'a' jako datového typu 'NUMBER' a její inicializace hodnotou '55'.
  • Řádek kódu 3: Deklarace proměnné 'b' jako datového typu 'NUMBER' a její inicializace hodnotou '5'.
  • Řádek kódu 4: Deklarování proměnné 'arth_operation' jako datový typ 'VARCHAR2' velikosti 20 a její inicializace hodnotou 'DIVIDE.'
  • Řádek kódu 6: Tisk výpisu „Program spuštěn“.
  • Řádek kódu 7: Začíná příkaz SEARCHED CASE. Kód z řádku 8 do řádku 13 je přeskočen, protože jejich hodnota selektoru (ADD, SUBTRACT, MULTIPLY) se neshoduje s hodnotou 'arth_operation'.
  • Řádek 14: Výraz klauzule WHEN „arth_operation = 'DIVIDE'“ splněn a výraz vrátí hodnotu TRUE.
  • Řádek kódu 15: Bude proveden Action_block klauzule WHEN a bude vytištěna zpráva 'Dělení čísel jsou: 11'.
  • Řádek 17: Označuje konec příkazu CASE.
  • Řádek kódu 18: Tisk výpisu „Program dokončen“.

Výstup kódu

Program started.
Division of the numbers are: 11
Program completed.

Shrnutí

TYP POPIS POUŽITÍ
CASE Podobně jako u IF-THEN-ELSIF prohlášení. 'SELECTOR' se používá k výběru alternativ namísto booleovského výrazu. Používá se k výběru z několika alternativ pomocí „SELECTOR“
VYHLEDÁVANÝ PŘÍPAD Příkaz CASE bez skutečného 'SELECTOR'. Místo toho obsahuje skutečnou podmínku (která se vyhodnotí jako PRAVDA/NEPRAVDA), která vybere alternativy. Většinou se používá k výběru z více než dvou alternativ.

Shrňte tento příspěvek takto: