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

  • 🔀 Scop: CASE alege un bloc de acțiune din mai multe, folosind un selector în loc de un lanț boolean.
  • 🎯 Selector: Expresia CASE este evaluată o singură dată și comparată cu fiecare valoare WHEN.
  • 🔎 CAZ căutat: Plasează o condiție completă în fiecare clauză WHEN și rulează prima care este adevărată.
  • 🧮 Orice tip: Selectorul poate fi o variabilă, un număr sau o expresie aritmetică.
  • 🛟 ALTE: Blocul opțional ELSE rulează atunci când nu există nicio alternativă potrivită.
  • 🔚 SFÂRȘIT CAZ: Un END CASE obligatoriu închide instrucțiunea.
  • 🗄️ Compatibil cu SQL: Spre deosebire de IF, CASE poate fi utilizat și direct în interiorul instrucțiunilor SQL.

Declarație CASE în Oracle PL / SQL

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.

Întrebări frecvente

Un CASE simplu compară o valoare a selectorului cu fiecare valoare WHEN. Un CASE căutat nu are selector și evaluează o condiție completă în fiecare WHEN, deci gestionează intervale și teste compuse.

Da. O expresie CASE poate apărea într-o clauză SELECT, WHERE sau ORDER BY, ceea ce reprezintă un avantaj cheie față de IF-THEN-ELSIF, o construcție care funcționează doar în interiorul blocurilor PL/SQL.

O instrucțiune CASE generează excepția CASE_NOT_FOUND dacă nicio ramură nu corespunde și nicio acțiune ELSE nu este prezentă. Adăugarea unei acțiuni ELSE, chiar și o acțiune NULL goală, evită această eroare de execuție.

Da. Când ramurile compară o expresie cu valori fixe, inteligența artificială poate rescrie lanțul ca un CASE mai curat. Verificați rezultatul, deoarece un CASE fără ELSE se comportă diferit față de un ELSIF lipsă.

O instrucțiune CASE rulează un bloc de acțiune per ramură și se termină cu END CASE. O expresie CASE returnează o singură valoare și se termină cu END, deci poate fi atribuită unei variabile sau utilizată în SQL.

Rezumați această postare cu: