SPRAWA Oświadczenie w Oracle PL/SQL z przykładami
Co to jest stwierdzenie CASE?
Instrukcja CASE jest podobna do instrukcji IF-THEN-ELSIF, która wybiera jedną alternatywę na podstawie warunku z dostępnych opcji.
- Instrukcja CASE do wybrania sekwencji używa „selektora”, a nie wyrażenia logicznego.
- Wartość wyrażenia w instrukcji CASE będzie traktowana jako selektor.
- Wyrażenie może być dowolnego typu (arytmetyczne, zmienne itp.)
- Każdej alternatywie przypisana jest pewna, predefiniowana wartość (selektor), a alternatywa z wartością selektora pasującą do wartości wyrażenia warunkowego zostanie wykonana.
- W odróżnieniu od IF-THEN-ELSIF instrukcji CASE można także używać w instrukcjach SQL.
- Blok ELSE w instrukcji CASE zawiera sekwencję, która musi zostać wykonana, jeśli nie zostanie wybrana żadna z alternatyw.
Składnia
CASE (expression) WHEN <valuel> THEN action_blockl; WHEN <value2> THEN action_block2; WHEN <value3> 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 .
- Wybrana zostanie klauzula „WHEN”, która pasuje do wartości wyrażenia i odpowiadająca jej wartość zostanie wykonany.
- Blok „ELSE” jest opcjonalny i zawiera który należy wykonać, gdy żadna z alternatyw nie pasuje do wartości wyrażenia.
- „END” oznacza koniec instrukcji CASE i jest obowiązkową częścią CASE.
1 przykład: Obliczenia arytmetyczne przy użyciu przypadku
W tym przykładzie wykonamy obliczenia arytmetyczne na dwóch liczbach 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; /
Objaśnienie kodu
- Wiersz kodu 2: Deklarowanie zmiennej „a” jako typu danych „NUMBER” i inicjowanie jej wartością „55”.
- Wiersz kodu 3: Deklarowanie zmiennej „b” jako typu danych „NUMBER” i inicjowanie jej wartością „5”.
- Wiersz kodu 4: Deklaracja zmiennej „arth_operation” jako typu danych „VARCHAR2” o rozmiarze 20 i zainicjowanie jej wartością „MULTIPLY”.
- Linia kodu 6: Drukowanie instrukcji „Program uruchomiony”.
- Linia kodu 7: CASE sprawdza wartość wyrażenia. W tym przypadku wartość zmiennej 'arth_operation' to 'MULTIPLY'. Ta wartość będzie teraz traktowana jako selektor dla tego polecenia CASE.
- Wiersz kodu 10: Klauzula WHEN o wartości „MULTIPLY” pasuje do wartości selektora, zatem kontroler wybierze ten blok akcji i wydrukuje komunikat „Mnożenie liczb wynosi: 275”.
- Linia kodu 13: Oznacza koniec instrukcji CASE.
- Linia kodu 14: Drukowanie komunikatu „Program zakończony”.
Wyjście kodu
Program started. Multiplication of the numbers are: 275 Program completed.
SPRAWA SZUKANA Oświadczenie
Instrukcja SEARCHED CASE jest podobna do instrukcji CASE, zamiast używać selektora do wyboru alternatywy, SEARCHED CASE będzie bezpośrednio mieć wyrażenie zdefiniowane w klauzuli WHEN.
- Zostanie wykonana pierwsza klauzula WHEN spełniająca warunek, a kontroler pominie pozostałe alternatywy.
Składnia
CASE WHEN <expression1> THEN action_blockl; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- W powyższej składni każda klauzula WHEN ma osobną klauzulę I .
- Wykonana zostanie klauzula WHEN, dla której wyrażenie zwróci wartość TRUE.
- Blok „ELSE” jest opcjonalny i zawiera które należy wykonać, gdy żadna z alternatyw nie jest spełniona.
- „END” oznacza koniec instrukcji CASE i jest obowiązkową częścią CASE.
1 przykład: Obliczenia arytmetyczne przy użyciu szukanego przypadku
W tym przykładzie wykonamy obliczenia arytmetyczne na dwóch liczbach 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; /
Objaśnienie kodu
- Wiersz kodu 2: Deklarowanie zmiennej „a” jako typu danych „NUMBER” i inicjowanie jej wartością „55”.
- Wiersz kodu 3: Deklarowanie zmiennej „b” jako typu danych „NUMBER” i inicjowanie jej wartością „5”.
- Wiersz kodu 4: Deklaracja zmiennej „arth_operation” jako typu danych „VARCHAR2” o rozmiarze 20 i zainicjowanie jej wartością „DIVIDE”.
- Linia kodu 6: Drukowanie instrukcji „Program uruchomiony”.
- Linia kodu 7: rozpoczyna się polecenie SEARCHED CASE. Kod od linii 8 do linii 13 jest pomijany, ponieważ ich wartość selektora (ADD, SUBTRACT, MULTIPLY) nie pasuje do wartości 'arth_operation'.
- Wiersz kodu 14: Wyrażenie klauzuli WHEN „arth_operation = 'DIVIDE'” jest spełnione i wyrażenie zwraca wartość TRUE.
- Wiersz kodu 15: Zostanie wykonany blok akcji klauzuli WHEN, a następnie zostanie wydrukowany komunikat „Podział liczb wynosi: 11”.
- Linia kodu 17: Oznacza koniec instrukcji CASE.
- Linia kodu 18: Drukowanie instrukcji „Program zakończony”.
Wyjście kodu
Program started. Division of the numbers are: 11 Program completed.
Podsumowanie
TYP | OPIS | ZASTOSOWANIE |
---|---|---|
Sprawa | Podobny do JEŚLI-WTEDY-ELSIF oświadczenie. Do wyboru alternatyw zamiast wyrażenia logicznego używany jest „SELECTOR”. | Służy do wybierania spośród kilku alternatyw za pomocą „SELECTOR” |
PRZESZUKIWANA SPRAWA | Instrukcja CASE bez faktycznego „SELECTORA”. Zamiast tego zawiera rzeczywisty warunek (który ma wartość PRAWDA/FAŁSZ), który wybierze alternatywy. | Zwykle wybierałem spośród więcej niż dwóch alternatyw. |