CASE-selostus sisään Oracle PL/SQL ja esimerkkejä

Mikä on CASE-lausunto?

CASE-käsky on samanlainen kuin IF-THEN-ELSIF-käsky, joka valitsee yhden vaihtoehdon ehdon perusteella käytettävissä olevista vaihtoehdoista.

  • CASE-käsky käyttää "valitsinta" Boolen lausekkeen sijaan sekvenssin valitsemiseen.
  • CASE-käskyn lausekkeen arvoa käsitellään valitsimena.
  • Lauseke voi olla mitä tahansa tyyppiä (aritmeettinen, muuttuja jne.)
  • Jokaiselle vaihtoehdolle on määritetty tietty ennalta määritetty arvo (valitsin), ja vaihtoehto, jonka valitsinarvo vastaa ehdollisen lausekkeen arvoa, suoritetaan.
  • Toisin kuin IF-THEN-ELSIF, CASE-käskyä voidaan käyttää myös SQL-käskyissä.
  • ELSE-lohko CASE-käskyssä sisältää sekvenssin, joka on suoritettava, kun mitään vaihtoehdoista ei ole valittu.

Syntaksi

CASE (expression)
 WHEN <valuel> THEN action_blockl;
 WHEN <value2> THEN action_block2;
 WHEN <value3> THEN action_block3;
 ELSE action_block_default;
END CASE;
  • Yllä olevassa syntaksissa lauseke palauttaa arvon, joka voi olla mitä tahansa tyyppiä (muuttuja, numero jne.).
  • Jokaista WHEN-lauseketta käsitellään vaihtoehtona, jolla on ja .
  • 'WHEN'-lause, joka vastaa lausekkeen arvoa, valitaan ja vastaava teloitetaan.
  • 'ELSE'-lohko on valinnainen, jossa on joka on suoritettava, kun mikään vaihtoehdoista ei vastaa lausekkeen arvoa.
  • 'END' merkitsee CASE-käskyn loppua, ja se on pakollinen osa CASE-lausetta.

Esimerkki 1: Aritmeettinen laskenta tapausta käyttäen

Tässä esimerkissä aiomme tehdä aritmeettisen laskennan kahden luvun 55 ja 5 välillä.

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

Koodin selitys

  • Koodirivi 2: Muuttujan 'a' ilmoittaminen NUMBER-tietotyypiksi ja sen alustaminen arvolla '55'.
  • Koodirivi 3: Muuttujan b ilmoittaminen NUMBER-tietotyypiksi ja sen alustaminen arvolla 5.
  • Koodirivi 4: Määritetään muuttuja 'arth_operation' tietotyypiksi 'VARCHAR2', jonka koko on 20, ja alustetaan se arvolla 'MULTIPLY'.
  • Koodirivi 6: Tulostetaan lause "Ohjelma aloitettu".
  • Koodirivi 7: CASE tarkistaa lausekkeen arvon. Tässä tapauksessa muuttujan 'arth_operation' arvo on 'MULTIPLY'. Tätä arvoa käsitellään nyt tämän CASE-käskyn valitsimena.
  • Koodirivi 10: WHEN-lause, jonka arvo on 'MULTIPLY', vastaa valitsimen arvoa, joten ohjain valitsee tämän action_blockin ja tulostaa viestin "Numeroiden kertolasku ovat: 275".
  • Koodirivi13: Merkitsee CASE-käskyn lopun.
  • Koodirivi14: Tulostetaan lausunto ”Ohjelma valmis”.

Koodilähtö

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

SEARCHED CASE lausunto

SEARCHED CASE -käsky on samanlainen kuin CASE-käsky, sen sijaan, että käyttäisit valitsimen vaihtoehdon valitsemiseen, SEARCHED CASE -lauseke on suoraan määritelty WHEN-lauseessa.

  • Ensimmäinen ehdon täyttävä WHEN-lause suoritetaan, ja ohjain ohittaa muut vaihtoehdot.

Syntaksi

CASE
WHEN <expression1> THEN action_blockl; 
WHEN <expression2> THEN action_block2; 
WHEN <expression3> THEN action_block3; 
ELSE action_block_default;
END CASE;
  • Yllä olevassa syntaksissa jokaisella WHEN-lauseella on erillinen ja .
  • WHEN-lause, jonka lauseke palauttaa TOSI, suoritetaan.
  • 'ELSE'-lohko on valinnainen, jossa on joka on suoritettava, kun mikään vaihtoehdoista ei tyydytä.
  • 'END' merkitsee CASE-käskyn loppua, ja se on pakollinen osa CASE-lausetta.

Esimerkki 1: Aritmeettinen laskenta käyttäen haettua tapausta

Tässä esimerkissä aiomme tehdä aritmeettisen laskennan kahden luvun 55 ja 5 välillä.

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

Koodin selitys

  • Koodirivi 2: Muuttujan 'a' ilmoittaminen NUMBER-tietotyypiksi ja sen alustaminen arvolla '55'.
  • Koodirivi 3: Muuttujan 'b' ilmoittaminen NUMBER-tietotyypiksi ja sen alustaminen arvolla '5'.
  • Koodirivi 4: Määritetään muuttuja "arth_operation" tietotyypiksi "VARCHAR2", jonka koko on 20, ja alustetaan se arvolla "DIVIDE".
  • Koodirivi 6: Tulostetaan lause "Ohjelma aloitettu".
  • Koodirivi 7: SEARCHED CASE -käsky alkaa. Koodi riviltä 8 riville 13 ohitetaan, koska niiden valitsimen arvo (LISÄÄ, VÄHENNÄ, MULTIPLY) ei täsmää 'arth_operation' arvon kanssa.
  • Koodirivi 14: WHEN-lauselauseke "arth_operation = 'DIVIDE" täyttyy ja lauseke palauttaa TRUE.
  • Koodirivi 15: WHEN-lauseen Action_block suoritetaan ja tulostetaan viesti 'Numeroiden jako: 11'.
  • Koodirivi 17: Merkitsee CASE-käskyn lopun.
  • Koodirivi 18: Tulostetaan lausunto "Ohjelma suoritettu".

Koodilähtö

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

Yhteenveto

TYYPPI KUVAUS KÄYTTÖ
CASE Samanlaisia JOS-SIIN-ELSIF lausunto. Vaihtoehtojen valitsemiseen käytetään 'SELECTOR'ia Boolen lausekkeen sijaan. Käytetään valitsemaan useista vaihtoehdoista SELECTOR-painikkeella
HAETTU TAPAUS CASE-käsky ilman varsinaista 'SELECTOR'ia. Sen sijaan se sisältää todellisen ehdon (jonka arvo on TOSI/EPÄTOSI), joka valitsee vaihtoehdot. Useimmiten valittiin useammasta kuin kahdesta vaihtoehdosta.