CASE nyilatkozat be Oracle PL/SQL példákkal

⚡ Okos összefoglaló

A PL/SQL CASE utasítás egy szelektor alapján választ ki egy alternatívát a több közül, hasonlóan az IF-THEN-ELSIF utasításhoz, de egyértelműbbé téve azt. Egy egyszerű CASE egy szelektorértékkel egyezik, míg a keresett CASE kiértékel egy feltételt minden WHEN záradékban, és az első igaz feltételt futtatja.

  • 🔀 Cél: A CASE egy műveleti blokkot választ ki a sok közül, Boole-lánc helyett szelektort használva.
  • 🎯 Választó: A CASE kifejezést egyszer kiértékeli a rendszer, és összehasonlítja az egyes WHEN értékekkel.
  • ???? Keresett ügy: Minden WHEN záradékba egy teljes feltételt helyez, és lefuttatja az első igaz feltételt.
  • 🧮 Bármely típus: A szelektor lehet változó, szám vagy aritmetikai kifejezés.
  • 🛟 MÁS: Az opcionális ELSE blokk akkor fut le, ha nincs egyező alternatíva.
  • 🔚 VÉGE ESET: Egy kötelező END CASE lezárja az utasítást.
  • 🗄️ SQL-barát: Az IF-fel ellentétben a CASE közvetlenül SQL utasításokon belül is használható.

CASE nyilatkozat be Oracle PL / SQL

Mi az a CASE utasítás?

A CASE utasítás hasonló az IF-THEN-ELSIF utasításhoz; egy alternatívát választ ki a rendelkezésre álló lehetőségek közül egy feltétel alapján.

  • A CASE utasítás logikai kifejezés helyett „szelektort” használ a szekvencia kiválasztásához.
  • A CASE utasításban szereplő kifejezés értékét szelektorként kezeli a rendszer.
  • A kifejezés bármilyen típusú lehet (számtani, változós stb.).
  • Minden alternatívához egy előre definiált érték (szelektor) van rendelve, és az az alternatíva kerül végrehajtásra, amelynek szelektorértéke megegyezik a feltételes kifejezés értékével.
  • Az IF-THEN-ELSIF-től eltérően a CASE utasítás SQL utasításokban is használható.
  • A CASE utasítás ELSE blokkja tartalmazza azt a szekvenciát, amelyet akkor kell végrehajtani, ha egyik alternatíva sincs kiválasztva.

Szintaxis

CASE (expression)
WHEN <value1> THEN action_block1;
WHEN <value2> THEN action_block2;
WHEN <value3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • A fenti szintaxisban a kifejezés egy bármilyen típusú értéket ad vissza.
  • Minden „WHEN” záradék egy alternatíva, amelynek van egy és egy .
  • A kifejezésnek megfelelő értékkel rendelkező „WHEN” záradék kerül kiválasztásra, és annak kivégzik.
  • Az „ELSE” blokk opcionális, és a következőt tartalmazza: végrehajtásra, ha nincs megfelelő alternatíva.
  • Az 'END' a CASE utasítás végét jelöli, és a CASE utasítás kötelező része.

1. példa: Számtani számítás CASE használatával

Ebben a példában egy aritmetikai műveletet végzünk két szám, az 55 és az 5 között.

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;
/

Code Magyarázat

  • Code 2. sor: Az 'a' változó deklarálása 'NUMBER'-ként és inicializálása '55' értékkel.
  • Code 3. sor: A 'b' változó deklarálása 'NUMBER'-ként és inicializálása '5' értékkel.
  • Code 4. sor: Az 'arth_operation' változó deklarálása 20 méretű 'VARCHAR2' változóként, és inicializálása 'MULTIPLY' értékkel.
  • Code 6. sor: A „Program elindult” utasítás kinyomtatása.
  • Code 7. sor: A CASE ellenőrzi a kifejezés értékét. Itt az 'arth_operation' értéke 'MULTIPLY', amelyet szelektorként kezel.
  • Code 10. sor: A 'MULTIPLY' értékű WHEN záradék illeszkedik a szelektorra, így a vezérlő kiválasztja ezt a műveleti blokkot, és a következőt nyomtatja ki: 'A számok szorzása: 275'.
  • Code 13. sor: A CASE utasítás végét jelöli.
  • Code 14. sor: A „Program befejeződött” utasítás kinyomtatása.

Code teljesítmény

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

KERESÉS ESET Nyilatkozata

A keresett CASE utasítás hasonló a CASE utasításhoz, de ahelyett, hogy szelektort használna az alternatíva kiválasztásához, a keresett CASE a WHEN záradékban közvetlenül definiált feltétellel rendelkezik.

  • Az első, a feltételnek eleget tevő WHEN záradék végrehajtásra kerül, és a vezérlő kihagyja a fennmaradó alternatívákat.

Szintaxis

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • A fenti szintaxisban minden WHEN záradéknak különálló és .
  • A WHEN záradék, amelyre a kifejezés TRUE értéket ad vissza, végrehajtásra kerül.
  • Az „ELSE” blokk opcionális, és a következőt tartalmazza: végrehajtásra, ha egyik alternatíva sem teljesül.
  • Az 'END' a CASE utasítás végét jelöli, és a CASE utasítás kötelező része.

1. példa: Számtani számítás keresett kis- és nagybetűk használatával

Ebben a példában egy aritmetikai műveletet végzünk két szám, az 55 és az 5 között.

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;
/

Code Magyarázat

  • Code 2. sor: Az 'a' változó deklarálása 'NUMBER'-ként és inicializálása '55' értékkel.
  • Code 3. sor: A 'b' változó deklarálása 'NUMBER'-ként és inicializálása '5' értékkel.
  • Code 4. sor: Az 'arth_operation' változó deklarálása 20 méretű 'VARCHAR2' változóként, és inicializálása 'DIVIDE' értékkel.
  • Code 6. sor: A „Program elindult” utasítás kinyomtatása.
  • Code 7. sor: Elkezdődik a keresett CASE utasítás. Az ADD és SUB utasításokhoz tartozó feltételes záradékokTRACA T és a MULTIPLY kimarad, mivel a feltételeik nem egyeznek meg az 'arth_operation' értékével.
  • Code 14. sor: A WHEN záradékban szereplő „arth_operation = 'DIVIDE'” kifejezés teljesül, és IGAZ értéket ad vissza.
  • Code 15. sor: A WHEN záradék műveleti blokkja végrehajtásra kerül, és a következő jelenik meg: 'A számok osztása: 11'.
  • Code 17. sor: A CASE utasítás végét jelöli.
  • Code 18. sor: A „Program befejeződött” utasítás kinyomtatása.

Code teljesítmény

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

Az eset és a keresett eset összehasonlítása

Mindkét forma egy ágat választ, de az ág kiválasztásának módjában különböznek, az alábbiakban összefoglalva.

típus Leírás Használat
Esetek Hasonló a HA-AKKOR-ELSIF utasítás. Logikai kifejezés helyett egy 'szelektor' segítségével választhatjuk ki az alternatívát. Több alternatíva közüli választásra szolgál egy szelektor segítségével.
KERESÉS ESET Egy CASE utasítás tényleges szelektor nélkül. Ehelyett tartalmazza a feltételt (amely TRUE vagy FALSE értéket ad ki), amely kiválasztja az alternatívát. Több mint két alternatíva közüli választásra használják, többnyire tartományfeltételekkel.

GYIK

Egy egyszerű CASE egy szelektorértéket hasonlít össze minden WHEN értékkel. Egy keresett CASE-nek nincs szelektora, és minden WHEN értékben egy teljes feltételt értékel ki, így tartományokat és összetett teszteket is kezel.

Igen. Egy CASE kifejezés szerepelhet SELECT, WHERE vagy ORDER BY záradékban, ami kulcsfontosságú előny az IF-THEN-ELSIF konstrukcióval szemben, amely csak PL/SQL blokkokon belül működik.

Egy CASE utasítás a CASE_NOT_FOUND kivételt idézi elő, ha nincs egyező ág és nincs jelen ELSE. Egy ELSE hozzáadása, akár egy üres NULL művelet esetén is, elkerüli ezt a futásidejű hibát.

Igen. Amikor az ágak egy kifejezést hasonlítanak össze fix értékekkel, a mesterséges intelligencia átírhatja a láncot egy tisztább CASE-ként. Ellenőrizze az eredményt, mivel egy ELSE nélküli CASE másképp viselkedik, mint egy hiányzó ELSIF.

Egy CASE utasítás áganként egy műveleti blokkot futtat, és END CASE utasítással végződik. Egy CASE kifejezés egyetlen értéket ad vissza, és END utasítással végződik, így hozzárendelhető egy változóhoz, vagy használható SQL-ben.

Foglald össze ezt a bejegyzést a következőképpen: