Oracle PL/SQL IF THEN ELSE Instrukcja: ELSIF, NESTED-IF

Czym są oświadczenia decyzyjne?

Oświadczenia podejmujące decyzje to te, które będą decydować o kontroli przepływu SQL oświadczenia na podstawie warunków. Daje programiście lepszą kontrolę nad zapobieganiem wykonaniu określonego kodu (schemat 1) lub wyborem żądanego kodu w oparciu o warunek (schemat 2). Poniżej znajduje się graficzne przedstawienie „Oświadczenia dotyczącego podejmowania decyzji”.

Schemat oświadczenia dotyczącego podejmowania decyzji
Schemat oświadczenia dotyczącego podejmowania decyzji

Rodzaje oświadczeń dotyczących podejmowania decyzji:

Oracle zapewnia następujące typy oświadczeń wspomagających podejmowanie decyzji.

  • JEŚLI TO
  • JEŚLI-TO-INNY
  • JEŚLI-WTEDY-ELSIF
  • ZAgnieżdżone-JEŚLI
  • Sprawa
  • PRZESZUKIWANA SPRAWA

Instrukcja JEŻELI-TO

Instrukcja JEŻELI-TO jest używana głównie do wykonania określonej sekcji kodu tylko wtedy, gdy warunek jest spełniony.

Warunek powinien ustąpić Boolean (Prawda/Fałsz). Jest to podstawowe polecenie warunkowe, które pozwoli ORACLE wykonać/pominąć konkretny fragment kodu na podstawie wstępnie zdefiniowanych warunków.

Składnia instrukcji IF THEN:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • W powyższej składni po słowie kluczowym „IF” nastąpi warunek, którego wynikiem będzie „PRAWDA”/„FAŁSZ”.
  • Sterowanie wykona tylko jeśli warunek powróci .
  • W przypadku warunku ocenia się na następnie SQL pominie i rozpocznie wykonywanie kodu znajdującego się obok bloku „END IF”.

Uwaga: Ilekroć warunek zostanie oceniony na „NULL”, SQL potraktuje „NULL” jako „FALSE”.

1 przykład: W tym przykładzie wydrukujemy komunikat, gdy liczba będzie większa niż 100. W tym celu wykonamy następujący kod

Aby wydrukować komunikat, gdy liczba ma wartość większą niż 100, wykonujemy następujący kod.

DECLARE 
a NUMBER :=10;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > 100 ) THEN
dbms_output.put_line('a is greater than 100'); 
END IF;
dbms_output.put_line(‘Program completed.');
END;
/

Wyjaśnienie kodu:

  • Wiersz kodu 2: Deklarowanie zmiennej „a” jako typu danych „NUMBER” i inicjowanie jej wartością „10”.
  • Linia kodu 4: Drukowanie instrukcji „Program uruchomiony”.
  • Linia kodu 5: Sprawdzanie warunku, czy zmienna „a” jest większa niż „100”.
  • Wiersz kodu 6: Jeśli „a” jest większe niż „100”, wówczas zostanie wydrukowane „a jest większe niż 100”. Jeśli „a” jest mniejsze lub równe 100, wówczas warunek nie jest spełniony, więc powyższa instrukcja drukowania jest ignorowana.
  • Linia kodu 8: Drukowanie instrukcji „Program zakończony”.

Dane wyjściowe kodu:

Program started.
Program completed.

2 przykład: W tym przykładzie wydrukujemy komunikat, jeśli dany alfabet występuje w angielskich samogłoskach (A, E, I, O, U).

Aby wyświetlić komunikat, gdy podany znak jest samogłoską, wykonujemy następujący kod.

DECLARE 
a CHAR(1) :=’u’;
BEGIN
IF UPPER(a) in ('A’,'E','I','0','U' ) THEN 
dbms_output.put_line(‘The character is in English Vowels');
END IF;
END;
/

Wyjaśnienie kodu:

  • Linia kodu 2: Deklarowanie zmiennej „a” jako „CHAR” o typie danych o rozmiarze „1” i inicjowanie jej wartością „u”.
  • Linia kodu 4: Sprawdzenie warunku, czy na liście znajduje się zmienna „a” („A”, „E”, „I”, „O”, „U”).
  • Wartość „a” została przed porównaniem przekonwertowana na wielkie litery, aby porównanie nie uwzględniało wielkości liter.
  • Linia kodu 5: Jeżeli na liście znajduje się litera „a”, zostanie wydrukowana informacja „Znak występuje w samogłoskach angielskich”. Jeśli warunek nie zostanie spełniony, program nie wyświetli żadnego wyniku, ponieważ poza blokiem IF-THEN nie wydaliśmy żadnej instrukcji drukowania.

Dane wyjściowe kodu:

The character is in English Vowels

Oświadczenie JEŚLI-TO-INACZEJ

  • Instrukcja IF-THEN-ELSE jest używana głównie do wyboru pomiędzy dwiema alternatywami na podstawie warunku.
  • Poniżej znajduje się reprezentacja składni instrukcji JEŻELI-TO-ELSE.

Składnia instrukcji IF-THEN-ELSE:

IF <condition: returns Boolean>
THEN
	-executed only if the condition returns TRUE
	<action_blockl>
ELSE
	-execute if the condition failed (returns FALSE)
	<action_block2>
END if;
  • W powyższej składni po słowie kluczowym „IF” nastąpi warunek, którego wynikiem będzie „PRAWDA”/„FAŁSZ”.
  • Sterowanie wykona tylko jeśli warunek powróci .
  • W przypadku warunku ma wartość następnie zostanie wykonany SQL .
  • W każdym przypadku zostanie wykonany jeden z dwóch bloków akcji.

Uwaga: Ilekroć warunek ma wartość „NULL”, SQL potraktuje „NULL” jako „FALSE”.

1 przykład: W tym przykładzie wydrukujemy informację czy podana liczba jest parzysta czy nieparzysta.

DECLARE 
a NUMBER:=11;
BEGIN
dbms_output.put_line (‘Program started');
IF( mod(a,2)=0) THEN 
dbms_output.put_line('a is even number' ); 
ELSE
dbms_output.put_line('a is odd number1); 
END IF;
dbms_output.put_line (‘Program completed.’);
END;
/

Wyjaśnienie kodu:

  • Wiersz kodu 2: Deklarowanie zmiennej „a” jako typu danych „NUMBER” i inicjowanie jej wartością „11”.
  • Linia kodu 4: Drukowanie instrukcji „Program uruchomiony”.
  • Linia kodu 5: Sprawdzanie warunku, czy moduł zmiennej „a” na „2” wynosi 0.
  • Linia kodu 6: Jeśli „0”, zostanie wydrukowane „a jest liczbą parzystą”.
  • Wiersz kodu 7: Jeśli wartość modułu nie jest równa „0”, warunek powraca , więc zostanie wydrukowany komunikat „a jest liczbą nieparzystą”.
  • Linia kodu 10: Drukowanie instrukcji „Program zakończony”

Dane wyjściowe kodu:

Program started.
a is odd number
Program completed.

Oświadczenie JEŚLI-WTEDY-ELSIF

  • Instrukcja IF-THEN-ELSIF jest używana głównie wtedy, gdy należy wybrać jedną alternatywę ze zbioru alternatyw, gdzie każda z alternatyw ma swoje własne warunki do spełnienia.
  • Pierwsze warunki, które powracają zostanie wykonane, a pozostałe warunki zostaną pominięte.
  • Instrukcja IF-THEN-ELSIF może zawierać blok „ELSE”. Ten blok „ELSE” zostanie wykonany, jeśli żaden z warunków nie zostanie spełniony.

Note: Blok ELSE jest opcjonalny w tej instrukcji warunkowej. Jeżeli nie ma bloku ELSE i żaden z warunków nie jest spełniony, to kontroler pominie cały blok akcji i rozpocznie wykonywanie pozostałej części kodu.

Składnia instrukcji IF-THEN-ELSIF:

IF <conditionl: returns Boolean>
THEN
-executed only if the condition returns TRUE <
action_blockl>
ELSIF <condition2 returns Boolean> <
action_block2>
ELSIF <condition3:returns Boolean> <
action_block3>
ELSE —optional 
<action_block_else>
END if;
  • W powyższej składni sterowanie wykona tylko wtedy, gdy warunek 1 powróci .
  • Jeśli warunek 1 nie jest spełniony, sterownik sprawdzi warunek 2.
  • Kontroler wyjdzie z instrukcji IF w następujących dwóch przypadkach.
    • Gdy kontroler znalazł dowolny warunek, który zwraca . W takim przypadku zostanie wykonany odpowiedni blok akcji, a kontroler opuści ten blok instrukcji IF i rozpocznie wykonywanie pozostałego kodu.
    • Gdy żaden z warunków nie zostanie spełniony, kontroler then wykona blok ELSE, jeśli jest obecny, a następnie wyjdzie z instrukcji IF.

Uwaga: Ilekroć warunek ma wartość „NULL”, SQL potraktuje „NULL” jako „FALSE”.

1 przykład: Bez bloku ELSE

W tym przykładzie będziemy drukować ocenę na podstawie podanych ocen bez innego warunku (ocena >= 70 Grade A, ocena >=40 i ocena<70 Grade B, ocena >=35 i ocena<40 Grade C).

DECLARE
mark NUMBER :=55;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’);
ELSIF(mark >= 40 AND mark < 70) THEN
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN
dbms_output.put_line(‘Grade C’);
END IF;
dbms_output.put_line(‘Program completed.’); 
END;
/

Wyjaśnienie kodu:

  • Wiersz kodu 2: Deklarowanie zmiennej „mark” jako typu danych „NUMBER” i inicjowanie jej wartością „55”.
  • Linia kodu 4: Drukowanie instrukcji „Program uruchomiony”.
  • Wiersz kodu 5: Sprawdzanie warunku 1, czy „znak” jest większy czy równy 70.
  • Wiersz kodu 7: Ponieważ warunek 1 nie powiódł się, sprawdzany jest warunek 2 „70>znak>=40”.
  • Linia kodu 8: Zwraca warunek 2 , stąd wydrukowany zostanie komunikat „Grade B”.
  • Linia kodu 12: Drukowanie komunikatu „Program zakończony”.
  • W tym przypadku warunek 3 „znak < 35” zostanie pominięty, ponieważ kontroler znalazł jeden warunek, który zwraca przed warunkiem 3.

Dane wyjściowe kodu:

Program started.
Grade B
Program completed.

2 przykład: Z blokiem ELSE

W tym przykładzie wydrukujemy ocenę na podstawie podanych ocen z innym warunkiem (znak >= 70 Ocena A, ocena >=40 i ocena<70 Ocena B, ocena >=35 i ocena<40 Ocena C, w przeciwnym razie „Brak oceny”).

DECLARE
mark NUMBER :=25;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’); 
ELSIF(mark >= 40 AND mark < 70) THEN 
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN 
dbms_output.put_line(‘Grade C);
ELSE
dbms_output.put_line(‘No Grade’);
END IF;
dbms_output.put_line(‘Program completed.' ); 
END;
/

Wyjaśnienie kodu:

  • Wiersz kodu 2: Deklarowanie zmiennej „mark” jako typu danych „NUMBER” i inicjowanie jej wartością „25”.
  • Linia kodu 4: Drukowanie instrukcji „Program uruchomiony”.
  • Wiersz kodu 5: Sprawdzanie warunku 1, czy „znak” jest większy czy równy 70.
  • Wiersz kodu 7: Ponieważ warunek 1 nie powiódł się, sprawdzany jest warunek 2 „70>znak>=40”.
  • Wiersz kodu 8: Ponieważ warunek 2 nie powiódł się, sprawdzany jest warunek 3 „40>znak>=35”.
  • Linia kodu 11: Ponieważ wszystkie warunki nie zostały spełnione, sterowanie sprawdzi teraz obecność bloku ELSE i wydrukuje komunikat „No Grade” z bloku ELSE.
  • Linia kodu 14: Drukowanie komunikatu „Program zakończony”.

Dane wyjściowe kodu:

Program started.
No Grade 
Program completed.

Instrukcja zagnieżdżona-IF

  • Instrukcja NESTED-IF zasadniczo pozwala programistom na umieszczenie jednego lub więcej warunków „JEŻELI” w innym warunku „JEŻELI” inne niż zwykłe wypowiedzi.
  • Każdy warunek „JEŻELI” powinien mieć oddzielną instrukcję „KONIEC JEŻELI”, która oznacza koniec zakresu tego konkretnego .
  • Instrukcja „IF” będzie traktować najbliższą instrukcję „END IF” jako punkt końcowy danego warunku.
  • Graficzne przedstawienie NESTED-IF pokazano na poniższym schemacie.

Instrukcja zagnieżdżona-IF

Instrukcja zagnieżdżona-IF

IF <conditionl: returns Boolean>
THEN
	—executed only if the condition returns TRUE
	<action block1 starts>
	IF <condition2: returns Boolean>
	THEN
	<action_block2>
	END IF; —END IF corresponds to condition2
<action_blockl ends>
END IF; —END IF corresponds to condition1

Wyjaśnienie składni:

  • W powyższej składni zewnętrzny IF zawiera w swoim bloku akcji jeszcze jedną instrukcję IF.
  • Warunek 1 powraca , wówczas kontrola będzie wykonywana i sprawdza warunek 1.
  • Jeśli warunek2 również zwróci , Następnie również zostanie wykonany.
  • W przypadku warunku 2 przyjmuje się następnie SQL pominie .

Tutaj zobaczymy przykład zagnieżdżonego if –

Przykład zagnieżdżonej instrukcji If: największa z trzech liczb

W tym przykładzie wydrukujemy największą z trzech liczb, używając instrukcji Nested-If. Liczby zostaną przypisane w części deklaracji, jak widać w poniższym kodzie, tj. Number= 10,15 i 20, a maksymalna liczba zostanie pobrana przy użyciu instrukcji nested-if.

DECLARE 
a NUMBER :=10; 
b NUMBER :=15; 
c NUMBER :=20;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > b)THEN
/*Nested-if l */
	dbms_output.put_line(’Checking Nested-IF 1'); 
	IF( a > c ) THEN
	dbms_output.put_line(‘A is greatest’); 
	ELSE
	dbms_output.put_line(‘C is greatest’); 
	END IF;
ELSE
/*Nested-if2 */
	dbms_output.put_line('Checking Nested-IF 2' ); 
	IF( b > c ) THEN
	dbms_output.put_line(’B is greatest' ); 
	ELSE
	dbms_output.put_line(’C is greatest' ); 
	END IF;
END IF;
dbms_output.put_line(‘Program completed.’ );
END;
/

Wyjaśnienie kodu:

  • Wiersz kodu 2: Deklarowanie zmiennej „a” jako typu danych „NUMBER” i inicjowanie jej wartością „10”.
  • Wiersz kodu 3: Deklarowanie zmiennej „b” jako typu danych „NUMBER” i inicjowanie jej wartością „15”.
  • Wiersz kodu 4: Deklarowanie zmiennej „c” jako typu danych „LICZBA” i inicjowanie jej wartością „20”.
  • Linia kodu 6: Wydrukowanie instrukcji „Program uruchomiony” (linia 6).
  • Linia kodu 7: Sprawdzanie warunku 1, czy „a” jest większe niż „b” (linia 7).
  • Wiersz kodu 10: Jeśli „a” jest większe niż „b”, wówczas warunek w „zagnieżdżonym-jeśli 1” sprawdzi, czy „a” jest większe niż „c” (wiersz 10).
  • Linia kodu 13: Jeśli nadal „a” jest większe, zostanie wydrukowany komunikat „A jest największe” (linia 11). W przeciwnym razie, jeśli warunek 2 nie zostanie spełniony, zostanie wydrukowane „C jest największe” (linia 13).
  • Linia kodu 18: Jeśli warunek 1 zwróci wartość false, wówczas warunek w „zagnieżdżonym-jeśli 2” sprawdzi, czy „b” jest większe niż „c” (linia 18).
  • Linia kodu 21: Jeśli „b” jest większe niż „c”, wówczas wydrukowany zostanie komunikat „B jest największy” (linia 19), w przeciwnym razie, jeśli warunek 2 nie zostanie spełniony, zostanie wydrukowany „C jest największy” (linia 21).
  • Linia kodu 24: Drukowanie instrukcji „Program zakończony” (linia 24).

Wyjście kodu:

Program started.
Checking Nested-IF 2
C is greatest
Program completed.

Podsumowanie

W tym rozdziale poznaliśmy różne stwierdzenia dotyczące podejmowania decyzji, ich składnię i przykłady. Poniższa tabela zawiera podsumowanie różnych instrukcji warunkowych, które omówiliśmy.

TYP OPIS ZASTOSOWANIE
JEŚLI TO Sprawdza warunek logiczny, jeśli zostanie wykonany kod PRAWDA w bloku „THEN”. Aby pominąć/wykonać określony kod w oparciu o warunek.
JEŚLI-TO-INNY Sprawdza warunek logiczny, czy zostanie wykonany kod PRAWDA w bloku „THEN”, jeśli zostanie wykonany fałszywy kod w bloku „ELSE”. Najbardziej odpowiedni w stanie „TO-LUB-TAK”.
JEŚLI-WTEDY-ELSIF Sprawdza warunek logiczny w kolejności sekwencyjnej. Wykonany zostanie pierwszy blok w sekwencji, który zwróci warunek TRUE. Jeśli żaden z warunków w sekwencji nie jest PRAWDZIWY, wykonywany jest kod z bloku „ELSE”. Zwykle wybierałem spośród więcej niż dwóch alternatyw.
ZAgnieżdżone-JEŚLI Zezwala na jedną lub więcej instrukcji IF-THEN lub IF-THEN-ELSIF wewnątrz innych instrukcji IF-THEN lub IF-THEN-ELSIF. Używane głównie w sytuacji zagnieżdżonej.