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.