Declarație CASE în Oracle PL/SQL cu exemple
⚡ Rezumat inteligent
Instrucțiunea PL/SQL CASE selectează o alternativă din mai multe pe baza unui selector, la fel ca IF-THEN-ELSIF, dar mai clar. O instrucțiune CASE simplă se potrivește cu o valoare a selectorului, în timp ce o instrucțiune CASE căutată evaluează o condiție din fiecare clauză WHEN și rulează prima care este adevărată.

Ce este o instrucțiune CASE?
O instrucțiune CASE este similară cu instrucțiunea IF-THEN-ELSIF; selectează o alternativă pe baza unei condiții din opțiunile disponibile.
- O instrucțiune CASE folosește un „selector” în loc de o expresie booleană pentru a alege secvența.
- Valoarea expresiei din instrucțiunea CASE este tratată ca un selector.
- Expresia poate fi de orice tip (aritmetică, variabile etc.).
- Fiecărei alternative i se atribuie o anumită valoare predefinită (selector), iar alternativa a cărei valoare a selectorului corespunde cu valoarea expresiei condiționale este executată.
- Spre deosebire de IF-THEN-ELSIF, instrucțiunea CASE poate fi folosită și în instrucțiuni SQL.
- Blocul ELSE dintr-o instrucțiune CASE conține secvența de execuție atunci când niciuna dintre alternative nu este selectată.
Sintaxă
CASE (expression) WHEN <value1> THEN action_block1; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- În sintaxa de mai sus, expresia returnează o valoare care poate fi de orice tip.
- Fiecare clauză „CÂND” este o alternativă care are un și un .
- Clauza „WHEN” a cărei valoare corespunde expresiei este selectată, iar este executat.
- Blocul „ELSE” este opțional și conține pentru a se executa atunci când nu există nicio alternativă potrivită.
- „END” marchează sfârșitul instrucțiunii CASE și este o parte obligatorie a instrucțiunii CASE.
Exemplul 1: Calcul aritmetic folosind CASE
În acest exemplu, facem un calcul aritmetic între două numere, 55 și 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; /
Code Explicație
- Code linia 2: Declararea variabilei 'a' ca 'NUMĂR' și inițializarea acesteia cu valoarea '55'.
- Code linia 3: Declararea variabilei „b” ca „NUMĂR” și inițializarea acesteia cu valoarea „5”.
- Code linia 4: Declararea variabilei „arth_operation” ca „VARCHAR2” de dimensiune 20 și inițializarea acesteia cu valoarea „MULTIPLY”.
- Code linia 6: Afișarea instrucțiunii „Program pornit”.
- Code linia 7: CASE verifică valoarea expresiei. Aici, valoarea lui „arth_operation” este „MULTIPLY”, care este tratată ca selector.
- Code linia 10: Clauza WHEN cu valoarea „MULTIPLY” se potrivește cu selectorul, deci controlerul selectează acest bloc de acțiune și afișează „Înmulțirea numerelor este: 275”.
- Code linia 13: Marchează sfârșitul instrucțiunii CASE.
- Code linia 14: Afișarea instrucțiunii „Program finalizat”.
Code producție
Program started. Multiplication of the numbers are: 275 Program completed.
Declarația CAZUL CĂUTAT
Instrucțiunea CASE căutată este similară cu instrucțiunea CASE, dar în loc să se utilizeze un selector pentru a alege alternativa, CASE-ul căutat are condiția definită direct în clauza WHEN.
- Prima clauză WHEN care satisface condiția este executată, iar controlerul sare peste alternativele rămase.
Sintaxă
CASE WHEN <expression1> THEN action_block1; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- În sintaxa de mai sus, fiecare clauză WHEN are o clauză separată şi .
- Clauza WHEN pentru care expresia returnează TRUE este executată.
- Blocul „ELSE” este opțional și conține a se executa atunci când niciuna dintre alternative nu este satisfăcută.
- „END” marchează sfârșitul instrucțiunii CASE și este o parte obligatorie a instrucțiunii CASE.
Exemplul 1: Calcul aritmetic folosind CASE căutat
În acest exemplu, facem un calcul aritmetic între două numere, 55 și 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; /
Code Explicație
- Code linia 2: Declararea variabilei 'a' ca 'NUMĂR' și inițializarea acesteia cu valoarea '55'.
- Code linia 3: Declararea variabilei „b” ca „NUMĂR” și inițializarea acesteia cu valoarea „5”.
- Code linia 4: Declararea variabilei „arth_operation” ca „VARCHAR2” de dimensiune 20 și inițializarea acesteia cu valoarea „DIVIDE”.
- Code linia 6: Afișarea instrucțiunii „Program pornit”.
- Code linia 7: Începe instrucțiunea CASE căutată. Clauzele pentru ADD, SUBTRACT și MULTIPLY sunt omise, deoarece condițiile lor nu corespund valorii lui „arth_operation”.
- Code linia 14: Expresia clauzei WHEN „arth_operation = 'DIVIDE'” este satisfăcută și returnează TRUE.
- Code linia 15: Se execută blocul de acțiune al clauzei WHEN și se afișează „Împărțirea numerelor este: 11”.
- Code linia 17: Marchează sfârșitul instrucțiunii CASE.
- Code linia 18: Afișarea instrucțiunii „Program finalizat”.
Code producție
Program started. Division of the numbers are: 11 Program completed.
Compararea CAZULUI și a CAZULUI CĂUTAT
Ambele forme aleg o ramură, dar diferă prin modul în care este selectată ramura, așa cum este rezumat mai jos.
| Tip | Descriere | Folosire |
|---|---|---|
| CASE | În mod similar cu DACĂ-Atunci-ELSIF instrucțiune. Un „selector” este folosit pentru a alege alternativa în locul unei expresii booleene. | Folosit pentru a selecta dintre mai multe alternative folosind un selector. |
| CAZ CĂUTAT | O instrucțiune CASE fără selector propriu-zis. În schimb, conține condiția (care se evaluează ca TRUE sau FALSE) care selectează alternativa. | Folosit pentru a alege dintre mai mult de două alternative, majoritatea cu condiții de interval. |
