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. |
