Úvod do Case Case v PL / SQL
Příkaz CASE v PL / SQL je podobný podmínce IF-ELSEIF, kde jsou v bloku uvedeny různé podmínky a pouze ty příkazy jsou provedeny, pro které splňuje podmínku. Příkaz CASE odpovídá hodnotě výrazu namísto booleovského výrazu. Výraz může být jakéhokoli datového typu a ve výpisech musí být použit stejný datový typ. Každý příkaz má předdefinovanou hodnotu a pokud se tato hodnota shoduje s hodnotami předanými ve výrazu selektoru, bude tento konkrétní příkaz proveden. V tomto tématu se budeme učit o příkazu CASE v PL / SQL.
Syntax
Teď, když jste pochopili, co je příkaz CASE v PL / SQL, pojďme se podívat na syntaxi příkazu CASE.
CASE (expression)
WHEN THEN statement_l;
WHEN THEN statement_2;
WHEN THEN statement_3;
ELSE default_statement;
END CASE;
Vysvětlení kódu
Ve výše uvedené syntaxi výraz vrátí hodnotu libovolného datového typu, všechny příkazy budou mít předdefinovanou jedinečnou hodnotu, výraz CASE projde všemi příkazy, dokud nedosáhne přesné shody definované v hodnotovém výrazu, v tomto případě, Value_1, Value_2 a Value_3. Pokud výraz Case nenalezl shodu ve výpisu, provede se výchozí příkaz.
Nezapomeňte, že blok ELSE je volitelný a pokud nechcete, aby se provedl jakýkoli výchozí příkaz, můžete tento příkaz přeskočit. Případ END je povinnou součástí případu.
Vývojový diagram
Jak funguje Case Case v PL / SQL?
Ačkoli prohlášení CASE zavedené v Oracle 9i, bylo široce používáno v jiných programovacích jazycích. Podobně jako jiné programovací jazyky, i CASE pracuje.
Oracle 9i podporuje dva typy CASE příkazů jednoduché CASE prohlášení a prohledávané CASE prohlášení
1. Jednoduché prohlášení o případu
V jednoduchém příkazu case se příkaz provede, pokud hodnota výrazu odpovídá uvedené podmínce. Tyto podmínky příkazu jsou při psaní příkazu CASE předdefinovány. Jakmile kompilátor najde shodu, rozbije se a vyjde ze smyčky po provedení příkazu, čímž se vyhne dalšímu zbytečnému vyhodnocení výrazu. Pokud kompilátor nenalezl žádnou shodu, provede příkaz výchozího případu. Výchozí případ není povinný a lze jej přeskočit.
Syntax
CASE expression
WHEN condition_1 THEN
statements1
WHEN condition_2 THEN
statements2
…
ELSE
statements_else
END CASE;
Vysvětlení
Jak bylo uvedeno výše, případ ELSE je volitelný. Kompilátor nejprve vyhodnotí výraz CASE a poté porovná výraz s první podmínkou. Pokud se podmínka shoduje s výrazem 1, dojde k jejímu provedení, jinak se kontroluje podmínka 2 a tak dále.
Podívejme se na nějaký příklad v reálném čase, aby byl koncept jasnější
SELECT Employee_Name,
CASE rating
WHEN 1 THEN 'Low'
WHEN 3 THEN 'High'
ELSE 'Medium' END
FROM Review;
Předpokládejme, že existuje revizní tabulka, která obsahuje podrobnosti zpětné vazby na konci roku a vy musíte uvést jméno zaměstnance a hodnocení. Ale místo čísel, které chcete zobrazit Nízké hodnocení je 1, Vysoké hodnocení je 3 jinak střední.
Výše uvedený dotaz bude mít níže uvedené výsledky
Employee_Name CASECR
---------
Bogart Low
Nolte Medium
Loren Medium
Gueney High
2. Hledané CASE prohlášení
Hledaný výraz CASE se mírně liší od jednoduchého příkazu CASE. V příkazu Prohledávaný případ místo předdefinované podmínky můžete napsat podmínku, která bude vyhodnocena v době spuštění.
pojďme se podívat na syntaxi příkazu prohledávaného CASE s tímto příkladem
CASE
WHEN salary >= 10000 AND salary <=20000 THEN
AllocateBonus(employee_id, 1500);
WHEN salary > 20000 AND salary <= 40000 THEN
AllocateBonus(employee_id, 1000);
WHEN salary > 40000 THEN
AllocateBonus(employee_id, 500);
WHEN salary > 60000 THEN
AllocateBonus(employee_id, 250);
ELSE
AllocateBonus(employee_id, 0);
END CASE;
Předpokládejme, že požadavkem je přidělit odměny zaměstnanci na základě jeho současného platového rozpětí. Pokud zaměstnanec spadá do určitých kritérií, měla by se zavolat funkce AllocateBonus, která jako parametry bere zaměstnanec_id a částku bonusu.
Ve výše uvedeném příkladu jsme definovali různá rozmezí platů a na základě této funkce se funkce AllocateBonus nazývá, pokud plat spadá do zadaného rozsahu.
Poznámka : V každé iteraci bude proveden jeden a pouze jeden příkaz, i když více příkazů splňuje kritéria. Když se klauzule vždy vyhodnocují v pořadí shora dolů.
Tipy
Protože se klauzule WHEN vyhodnocuje v určitém pořadí, tj. Shora dolů, doporučuje se vyjmenovat klauzule, která se s největší pravděpodobností vyskytnou jako první, nebo je frekvence častější. Kromě kterékoli klauzule WHEN je nákladný, tj. Výraz, který vyžaduje hodně paměti CPU, by měl být přítomen konečně, aby se minimalizovala šance na spuštění.
3. Vnořené prohlášení CASE
Podobně jako vnořený příkaz IF-ELSE lze vnořit i příkaz CASE. Syntaxe zůstává stejná, jen když vnější podmínka splňuje kritéria, prochází opět řadou příkazů. Pojďme improvizovat výše uvedený příklad CASE, abychom pochopili, jak funguje příkaz Vnořený CASE.
CASE
WHEN salary >= 10000 THEN
CASE
WHEN salary <= 20000 THEN
AllocateBonus(employee_id, 1500);
WHEN salary > 20000 THEN
AllocateBonus(employee_id, 1000);
END CASE;
WHEN salary > 40000 THEN
AllocateBonus(employee_id, 500);
WHEN salary < 10000 THEN
give_bonus(employee_id, 0);
END CASE;
Vysvětlení
Jak vidíte, syntaxe zůstává stejná pouze v případě, že podmínka splňuje, prochází znovu příkazem CASE, aby konečně provedla funkci přidělení.
Závěr - Příkaz CASE v PL / SQL
Nyní, když jsme dosáhli konce článku, shrneme klíčové body, které jsme v tomto článku diskutovali. Viděli jsme, co je příkaz CASE v PL / SQL, naučili jsme se základní syntaxi s příkladem. Příkladem jsme diskutovali různé typy příkazu CASE, tj. Jednoduché CASE, Searched CASE a Nested CASE. Také jsme se naučili, jak můžeme optimalizovat prohlášení CASE správným uspořádáním klauzule WHEN.
Doporučené články
Toto je průvodce příkazem CASE v PL / SQL. Zde diskutujeme o tom, jak funguje Case Case v PL / SQL s příklady a syntaxí. Další informace naleznete také v následujících článcích -
- Co je PL / SQL?
- Příkazy PL / SQL
- Použití SQL
- Kariéra v PL / SQL
- IF-Else prohlášení v Matlabu
- Smyčky v PL / SQL