Úvod do prípadu v PL / SQL

Príkaz CASE v PL / SQL je podobný podmienke IF-ELSEIF, kde sú v rámci bloku uvedené rôzne podmienky a vykonávajú sa iba tie príkazy, pre ktoré spĺňa podmienku. Príkaz CASE sa zhoduje s hodnotou výrazu namiesto logického výrazu. Výraz môže byť ľubovoľného typu údajov a v príkazoch sa musí použiť rovnaký typ údajov. Každý príkaz má preddefinovanú hodnotu a ak sa táto hodnota zhoduje s hodnotami odovzdanými vo výberovom výraze, vykoná sa tento konkrétny príkaz. V tejto téme sa dozvieme o príkaze CASE v PL / SQL.

syntax

Teraz, keď ste dostali podstatu toho, čo je príkaz CASE v PL / SQL, pozrime sa na syntax príkazu CASE.

CASE (expression)
WHEN THEN statement_l;
WHEN THEN statement_2;
WHEN THEN statement_3;
ELSE default_statement;
END CASE;

Vysvetlenie kódu

Vo vyššie uvedenej syntaxi výraz vráti hodnotu ľubovoľného typu údajov, všetky príkazy budú mať preddefinovanú jedinečnú hodnotu, výraz CASE prejde všetkými príkazmi, až kým nedosiahne presnú zhodu definovanú vo výraze hodnoty, v tomto prípade, Value_1, Value_2 a Value_3. Ak výraz Case nenašiel zhodu vo výpise, vykoná sa predvolený príkaz.

Všimnite si, že blok ELSE je voliteľný a ak nechcete, aby sa vykonal akýkoľvek predvolený príkaz, môžete tento príkaz preskočiť. Prípad END je povinnou súčasťou prípadu.

Vývojový diagram

Ako funguje Case Case v PL / SQL?

Aj keď vyhlásenie CASE zavedené v systéme Oracle 9i sa vo veľkej miere používa v iných programovacích jazykoch. Podobne ako iné programovacie jazyky, vyhlásenie CASE funguje podobným spôsobom.

Oracle 9i podporuje dva typy jednoduchých príkazov CASE a prehľadaných príkazov CASE

1. Jednoduché vyhlásenie o prípade

V jednoduchom príkaze sa príkaz vykoná, ak sa hodnota výrazu zhoduje s uvedenou podmienkou. Tieto podmienky sú preddefinované pri písaní vyhlásenia CASE. Akonáhle kompilátor nájde zhodu, rozbije sa a po vykonaní príkazu vyjde zo slučky, čím sa zabráni ďalšiemu zbytočnému hodnoteniu výrazu. Ak kompilátor nenájde žiadnu zhodu, vykoná príkaz štandardného prípadu. Predvolený prípad nie je povinný a je možné ho preskočiť.

syntax

CASE expression
WHEN condition_1 THEN
statements1
WHEN condition_2 THEN
statements2

ELSE
statements_else
END CASE;

vysvetlenie

Ako už bolo uvedené, prípad ELSE je voliteľný. Kompilátor najskôr vyhodnotí výraz CASE a potom porovná výraz s prvou podmienkou. Ak sa podmienka zhoduje s výrazom 1, bude vykonaná inak, je skontrolovaná podmienka 2 a tak ďalej.

Pozrime sa na nejaký príklad v reálnom čase, aby sme lepšie pochopili tento pojem

SELECT Employee_Name,
CASE rating
WHEN 1 THEN 'Low'
WHEN 3 THEN 'High'
ELSE 'Medium' END
FROM Review;

Predpokladajme, že existuje kontrolná tabuľka, ktorá obsahuje podrobnosti spätnej väzby ku koncu roka a vy musíte uviesť meno zamestnanca a hodnotenie. Ale namiesto čísel, ktoré chcete zobraziť Nízke hodnotenie je 1, Vysoké hodnotenie je 3, inak stredné.

Vyššie uvedený dopyt poskytne nižšie uvedené výsledky

Employee_Name CASECR

---------

Bogart Low

Nolte Medium

Loren Medium

Gueney High

2. Hľadané vyhlásenie CASE

Hľadaný príkaz CASE sa mierne líši od jednoduchého príkazu CASE. Do príkazu Searched Case Statement namiesto preddefinovanej podmienky môžete napísať stav, ktorý sa vyhodnotí v čase vykonávania.

poďme sa pozrieť na syntax príkazu Searched CASE s týmto príkladom

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;

Predpokladajme, že požiadavkou je zamestnancovi prideľovať prémie na základe jeho súčasného platového rozpätia. Ak zamestnanec spadá do určitých kritérií, mala by sa zavolať funkcia AllocateBonus, ktorá ako parametre vezme zamestnanec_id a sumu bonusu.

Vo vyššie uvedenom príklade sme definovali rôzne rozsahy platov a na základe toho sa funkcia AllocateBonus nazýva, ak plat spadá do špecifikovaného rozsahu.

Poznámka : V každej iterácii sa vykoná jeden a iba jeden príkaz, aj keď viacero príkazov spĺňa kritériá. Keď sa klauzuly hodnotia vždy zhora nadol.

Tipy

Pretože sa klauzula WHEN hodnotí v určitom poradí, tj zhora nadol, odporúča sa uviesť zoznam tých ustanovení, ktoré sa najpravdepodobnejšie vyskytnú skôr, alebo je ich frekvencia väčšia. Okrem klauzuly WHEN je nákladný, tj výraz, ktorý vyžaduje veľa pamäte CPU, by mal byť prítomný na poslednom mieste, aby sa minimalizovali šance na vykonanie.

3. Vnorené vyhlásenie CASE

Podobne ako vnorený príkaz IF-ELSE, aj príkaz CASE môže byť vnorený. Syntax zostáva rovnaká len v tom prípade, keď vonkajšia podmienka spĺňa kritériá, prechádza opäť radom príkazov. Poďme improvizovať vyššie uvedený príklad CASE, aby sme pochopili, ako funguje vnorené vyhlásenie 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;

vysvetlenie

Ako vidíte, syntax zostáva rovnaká, len keď podmienka spĺňa podmienky, znova prejdite príkazom CASE, aby ste konečne vykonali funkciu alokácie.

Záver - Prípad CASE v PL / SQL

Teraz, keď sme dosiahli koniec tohto článku, zhrnujme kľúčové body, o ktorých sme diskutovali v tomto článku. Videli sme, čo je príkaz CASE v PL / SQL, naučili sme sa základnú syntax s príkladom. S príkladom sme diskutovali rôzne typy príkazov CASE, tj jednoduché CASE, prehľadané CASE a vnorené vyhlásenie CASE. Dozvedeli sme sa tiež, ako môžeme optimalizovať vyhlásenie CASE správnym usporiadaním klauzuly WHEN.

Odporúčané články

Toto je sprievodca príkazom CASE v PL / SQL. Tu diskutujeme o tom, ako funguje Case Case v PL / SQL s príkladmi a syntaxou. Ďalšie informácie nájdete aj v nasledujúcich článkoch -

  1. Čo je PL / SQL?
  2. Príkazy PL / SQL
  3. Použitie SQL
  4. Kariéra v PL / SQL
  5. Vyhlásenie IF-Else v Matlabe
  6. Slučky v PL / SQL