Co to jest oświadczenie CASE?
Instrukcja CASE jest podobna do instrukcji IF-THEN-ELSIF, która wybiera jedną alternatywę na podstawie warunku z dostępnych opcji.
- Instrukcja CASE używa „selektora” zamiast wyrażenia boolowskiego do wybrania sekwencji.
- Wartość wyrażenia w instrukcji CASE będzie traktowana jako selektor.
- Wyrażenie może być dowolnego typu (arytmetyka, zmienne itp.)
- Każda alternatywa ma przypisaną określoną wstępnie zdefiniowaną wartość (selektor), a alternatywa z wartością selektora, która jest zgodna z wartością wyrażenia warunkowego, zostanie wykonana.
- W przeciwieństwie do IF-THEN-ELSIF instrukcja CASE może być również używana w instrukcjach SQL.
- Blok ELSE w instrukcji CASE zawiera sekwencję, która musi zostać wykonana, gdy żadna z alternatyw nie została wybrana.
Składnia:
CASE (expression)WHENTHEN action_blockl;WHEN THEN action_block2;WHEN THEN action_block3;ELSE action_block_default;END CASE;
- W powyższej składni wyrażenie zwróci wartość, która może być dowolnego typu (zmienna, liczba itp.).
- Każda klauzula „WHEN” jest traktowana jako alternatywa, która ma
i . - Zostanie wybrana klauzula „WHEN”, która odpowiada wartości wyrażenia, a odpowiadający jej element
zostanie wykonany. - Blok „ELSE” jest opcjonalny i zawiera wartość
, która musi zostać wykonana, gdy żadna z alternatyw nie pasuje do wartości wyrażenia. - „END” oznacza koniec oświadczenia CASE i jest obowiązkową częścią CASE.
Przykład 1: Obliczenia arytmetyczne przy użyciu przypadku
W tym przykładzie wykonamy obliczenia arytmetyczne między dwiema liczbami 55 i 5.
DECLAREa NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='MULTIPLY’;BEGINdbms_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;/
Objaśnienie kodu:
- Linia kodu 2: Zadeklarowanie zmiennej „a” jako typu danych „LICZBA” i zainicjowanie jej wartością „55”.
- Linia kodu 3: Zadeklarowanie zmiennej „b” jako typu danych „LICZBA” i zainicjowanie jej wartością „5”.
- Linia kodu 4: Zadeklarowanie zmiennej „arth_operation” jako typ danych „VARCHAR2” o rozmiarze 20 i zainicjowanie jej wartością „MULTIPLY”.
- Linia kodu 6: Wydruk instrukcji „Program uruchomiony”.
- Linia kodu 7: CASE sprawdza wartość wyrażenia. W tym przypadku wartością zmiennej „arth_operation” jest „MULTIPLY”. Ta wartość będzie teraz traktowana jako selektor dla tej instrukcji CASE.
- Linia kodu 10: Klauzula WHEN o wartości „MULTIPLY” jest zgodna z wartością selektora, dlatego kontroler wybierze ten blok akcji i wydrukuje komunikat „Mnożenie liczb to: 275”.
- Linia kodu 13: oznacza koniec instrukcji CASE.
- Linia kodu 14: Drukowanie instrukcji „Program zakończony”.
Kod wyjściowy:
Program started.Multiplication of the numbers are: 275Program completed.
Instrukcja SEARCHED CASE
Instrukcja SEARCHED CASE jest podobna do instrukcji CASE i zamiast używać selektora do wybierania alternatywy, SEARCHED CASE będzie miała bezpośrednio wyrażenie zdefiniowane w klauzuli WHEN.
- Pierwsza klauzula WHEN, która spełnia warunek, zostanie wykonana, a kontroler pominie pozostałe alternatywy.
Składnia:
CASEWHENTHEN action_blockl;WHEN THEN action_block2;WHEN THEN action_block3;ELSE action_block_default;END CASE;
- W powyższej składni każda klauzula WHEN ma oddzielne
i . - Klauzula WHEN, dla której wyrażenie zwraca wartość TRUE, zostanie wykonana.
- Blok „ELSE” jest opcjonalny i zawiera wartość
, która musi zostać wykonana, gdy żadna z alternatyw nie spełnia wymagań. - „END” oznacza koniec oświadczenia CASE i jest obowiązkową częścią CASE.
Przykład 1: Obliczenia arytmetyczne przy użyciu szukanego przypadku
W tym przykładzie wykonamy obliczenia arytmetyczne między dwiema liczbami 55 i 5.
DECLARE a NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='DIVIDE';BEGINdbms_output.put_line(‘Program started.' );CASEWHEN 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;/
Objaśnienie kodu:
- Linia kodu 2: Zadeklarowanie zmiennej „a” jako typu danych „LICZBA” i zainicjowanie jej wartością „55”.
- Linia kodu 3: Zadeklarowanie zmiennej „b” jako typu danych „LICZBA” i zainicjowanie jej wartością „5”.
- Linia kodu 4: Zadeklarowanie zmiennej „arth_operation” jako typ danych „VARCHAR2” o rozmiarze 20 i zainicjowanie jej wartością „DIVIDE”.
- Linia kodu 6: Wydruk instrukcji „Program uruchomiony”.
- Linia kodu 7: Rozpoczyna się instrukcja SEARCHED CASE. Kod od linii 8 do linii 13 jest pomijany, ponieważ ich wartość selektora (ADD, SUBTRACT, MULTIPLY) nie zgadza się z wartością „arth_operation”.
- Linia kodu 14: wyrażenie „arth_operation = 'DIVIDE'” klauzuli WHEN zostało spełnione, a wyrażenie zwraca wartość PRAWDA.
- Linia kodu 15: Wykonany zostanie Action_block klauzuli WHEN i zostanie wydrukowany komunikat „Podział liczb to: 11”.
- Linia kodu 17: oznacza koniec instrukcji CASE.
- Linia kodu 18: Drukowanie instrukcji „Program zakończony”.
Kod wyjściowy:
Program started.Division of the numbers are: 11Program completed.
Podsumowanie
RODZAJ | OPIS | STOSOWANIE |
---|---|---|
WALIZKA |
Podobna do instrukcji IF-THEN-ELSIF. „SELEKTOR” służy do wyboru alternatyw zamiast wyrażenia boolowskiego. |
Służy do wybierania spośród kilku alternatyw za pomocą „SELECTOR” |
SZUKANY PRZYPADEK |
Instrukcja CASE bez rzeczywistego „SELECTOR”. Zamiast tego zawiera rzeczywisty stan (którego wynikiem jest PRAWDA / FAŁSZ), który wybierze alternatywy. |
Używane głównie do wyboru z więcej niż dwóch alternatyw. |