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