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

Spisie treści:

Anonim

Co to są oświadczenia decyzyjne?

Instrukcje decyzyjne to ci, którzy decydują o sterowaniu przepływem instrukcji SQL na podstawie warunków. Daje programiście lepszą kontrolę nad zapobieganiem wykonaniu określonego kodu (diagram 1) lub wyborem żądanego kodu na podstawie warunku (diagram 2). Poniżej znajduje się graficzne przedstawienie „Oświadczenia do podejmowania decyzji”.

Diagram instrukcji podejmowania decyzji

Rodzaje oświadczeń decyzyjnych:

Oracle udostępnia następujące typy oświadczeń decyzyjnych.

  • JEŚLI NASTĘPNIE
  • JEŻELI-TO-INNE
  • JEŚLI-TO-ELSIF
  • NESTED-IF
  • WALIZKA
  • SZUKANY PRZYPADEK

W tym samouczku nauczysz się:

  • Wprowadzenie do stwierdzeń dotyczących podejmowania decyzji
  • Instrukcja IF-THEN
  • Instrukcja IF-THEN-INSE
  • Instrukcja IF-THEN-ELSIF
  • Instrukcja NESTED-IF

Instrukcja IF-THEN

Instrukcja IF-THEN jest używana głównie do wykonania określonej sekcji kodów tylko wtedy, gdy warunek jest spełniony.

Warunek powinien dawać wartość logiczną (prawda / fałsz). Jest to podstawowa instrukcja warunkowa, która pozwoli ORACLE wykonać / pominąć określony fragment kodu na podstawie wcześniej zdefiniowanych warunków.

Składnia instrukcji IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • W powyższej składni po słowie kluczowym „IF” nastąpi warunek, którego wynikiem będzie „TRUE” / „FALSE”.
  • Formant wykona tylko wtedy, gdy warunek zwróci .
  • W przypadku, gdy warunek zostanie oceniony jako , SQL pominie i rozpocznie wykonywanie kodu obok bloku "KONIEC JEŻELI".

Uwaga: za każdym razem, gdy warunek zostanie oceniony na „NULL”, SQL potraktuje „NULL” jako „FALSE”.

Przykład 1 : W tym przykładzie wydrukujemy wiadomość, 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.

DECLAREa NUMBER :=10;BEGINdbms_output.put_line(‘Program started.' );IF( a> 100 ) THENdbms_output.put_line('a is greater than 100');END IF;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ą „10”.
  • Linia kodu 4: Drukowanie instrukcji „Program uruchomiony”.
  • Linia kodu 5: Sprawdzanie warunku, czy zmienna „a” jest większa niż „100”.
  • Linia kodu 6: Jeśli „a” jest większe niż „100”, zostanie wydrukowane „a jest większe niż 100”. Jeśli „a” jest mniejsze lub równe 100, to warunek zawodzi, więc powyższa instrukcja wypisywania została zignorowana.
  • Linia kodu 8: Drukowanie instrukcji „Program zakończony”.

Kod wyjściowy:

Program started.Program completed. 

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

Aby wydrukować komunikat, gdy dany znak to samogłoska, wykonujemy następujący kod.

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

Objaśnienie kodu:

  • Linia kodu 2: Zadeklarowanie zmiennej „a” jako typu danych „CHAR” o rozmiarze „1” i zainicjowanie jej wartością „u”.
  • Linia kodu 4: Sprawdzanie warunku, czy zmienna „a” znajduje się na liście („A”, „E”, „I”, „O”, „U”).
  • Wartość „a” została przekonwertowana na wielkie litery przed porównaniem, aby dokonać porównania bez rozróżniania wielkości liter.
  • Linia kodu 5: Jeśli na liście występuje „a”, zostanie wydrukowane stwierdzenie „Znak jest w angielskich samogłoskach”. Jeśli warunek się nie powiódł, to ten program nie da żadnego wyjścia, ponieważ poza blokiem IF-THEN nie wydaliśmy żadnej instrukcji drukowania.

Kod wyjściowy:

The character is in English Vowels

Instrukcja IF-THEN-INSE

  • Instrukcja JEŻELI-TO-JESZCZE jest używana głównie do wybierania między dwiema alternatywami w oparciu o warunek.
  • Poniżej znajduje się reprezentacja składni instrukcji IF-TO-ELSE.

Składnia instrukcji IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • W powyższej składni po słowie kluczowym „IF” nastąpi warunek, którego wynikiem będzie „TRUE” / „FALSE”.
  • Formant wykona tylko wtedy, gdy warunek zwróci .
  • W przypadku, gdy warunek zostanie oceniony na , SQL wykona .
  • W każdym razie jeden z dwóch bloków akcji zostanie wykonany.

Uwaga: za każdym razem, gdy warunek ma wartość „NULL”, SQL potraktuje „NULL” jako „FALSE”.

Przykład 1 : W tym przykładzie wydrukujemy wiadomość, czy podana liczba jest nieparzysta czy parzysta.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_output.put_line('a is odd number1);END IF;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ą „11”.
  • Linia kodu 4: Drukowanie instrukcji „Program uruchomiony”.
  • Linia kodu 5: Sprawdzanie warunku, czy moduł zmiennej „a” o „2” wynosi 0.
  • Linia kodu 6: Jeśli '0', zostanie wydrukowane „a jest liczbą parzystą”.
  • Linia kodu 7: Jeśli wartość modułu nie jest równa „0”, to warunek zwraca , więc zostanie wydrukowany komunikat „a jest liczbą nieparzystą”.
  • Linia kodu 10: Drukowanie instrukcji „Program zakończony”

Kod wyjściowy:

Program started.a is odd numberProgram completed. 

Instrukcja IF-THEN-ELSIF

  • Instrukcja IF-THEN-ELSIF jest używana głównie w przypadku, gdy należy wybrać jedną alternatywę z zestawu alternatyw, gdzie każda alternatywa ma swoje własne warunki do spełnienia.
  • Pierwsze warunki zwracające zostaną 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.

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

Składnia instrukcji IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • W powyższej składni formant wykona tylko wtedy, gdy warunek1 zwróci .
  • Jeśli warunek 1 nie jest spełniony, sterownik sprawdzi warunek 2.
  • Kontroler wyjdzie z instrukcji IF w dwóch następujących przypadkach.
    • Gdy kontroler znalazł warunek, który zwraca . W takim przypadku odpowiedni blok_akcji zostanie wykonany, a sterownik wyjdzie z tego bloku instrukcji IF i rozpocznie wykonywanie pozostałego kodu.
    • Gdy żaden z warunków nie jest spełniony, wówczas kontroler wykona blok ELSE, jeśli jest obecny, a następnie wyjdzie z instrukcji IF.

Uwaga: za każdym razem, gdy warunek ma wartość „NULL”, SQL potraktuje „NULL” jako „FALSE”.

Przykład 1: bez bloku ELSE

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

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

Objaśnienie kodu:

  • Linia kodu 2: Zadeklarowanie zmiennej „mark” jako typu danych „NUMBER” i zainicjowanie jej wartością „55”.
  • Linia kodu 4: Drukowanie instrukcji „Program uruchomiony”.
  • Linia kodu 5: Sprawdzanie warunku1, czy „znak” jest większy lub równy 70.
  • Linia kodu 7: Ponieważ warunek1 nie powiódł się, sprawdzany jest warunek2 '70> znak> = 40 '.
  • Linia kodu 8: warunek 2 zwraca , dlatego zostanie wydrukowany komunikat „Grade B”.
  • Linia kodu 12: Drukowanie instrukcji „Program zakończony”.
  • W tym przypadku warunek 'znacznik <35' warunek3 zostanie pominięty, ponieważ sterownik znalazł jeden warunek, który zwraca przed warunkiem3.

Kod wyjściowy:

Program started.Grade BProgram completed.

Przykład 2 : Z blokiem ELSE

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

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

Objaśnienie kodu:

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

Kod wyjściowy:

Program started.No GradeProgram completed.

Instrukcja NESTED-IF

  • Instrukcja NESTED-IF zasadniczo umożliwia programistom umieszczenie jednego lub więcej warunków „JEŻELI” wewnątrz elementu innego warunku „JEŻELI” innego niż zwykłe instrukcje.
  • Każdy warunek „JEŻELI” powinien mieć oddzielną instrukcję „KONIEC JEŻELI”, która oznacza koniec zakresu tego konkretnego elementu .
  • Instrukcja „IF” uzna najbliższą instrukcję „END IF” za punkt końcowy dla tego konkretnego warunku.
  • Graficzne przedstawienie NESTED-IF pokazano na poniższym schemacie.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Objaśnienie składni:
  • W powyższej składni zewnętrzny JEŻELI zawiera jeszcze jedną instrukcję JEŻELI w swoim bloku akcji.
  • Warunek 1 zwraca , a następnie sterowanie wykona i sprawdzi warunek2.
  • Jeśli warunek 2 również zwróci , to również zostanie wykonany.
  • W przypadku, gdy warunek 2 zostanie oceniony na , SQL pominie .

Tutaj zobaczymy przykład zagnieżdżonego, jeśli -

Przykład instrukcji zagnieżdżonej - jeśli: największa z trzech liczb

W tym przykładzie wydrukujemy największą z trzech liczb za pomocą instrukcji zagnieżdżonej-jeśli. Numery zostaną przypisane w części deklaracji, jak widać na poniższym kodzie, tj. Number = 10,15 i 20, a maksymalna liczba zostanie pobrana za pomocą zagnieżdżonych instrukcji-if.

DECLAREa NUMBER :=10;b NUMBER :=15;c NUMBER :=20;BEGINdbms_output.put_line(‘Program started.' );IF( a> b)THEN/*Nested-if l */dbms_output.put_line(’Checking Nested-IF 1');IF( a> c ) THENdbms_output.put_line(‘A is greatest’);ELSEdbms_output.put_line(‘C is greatest’);END IF;ELSE/*Nested-if2 */dbms_output.put_line('Checking Nested-IF 2' );IF( b> c ) THENdbms_output.put_line(’B is greatest' );ELSEdbms_output.put_line(’C is greatest' );END IF;END IF;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ą „10”.
  • Linia kodu 3: Zadeklarowanie zmiennej „b” jako typu danych „LICZBA” i zainicjowanie jej wartością „15”.
  • Linia kodu 4: Zadeklarowanie zmiennej „c” jako typu danych „LICZBA” i zainicjowanie jej wartością „20”.
  • Linia kodu 6: Drukowanie instrukcji „Program uruchomiony” (wiersz 6).
  • Linia kodu 7: Sprawdzanie warunku1, czy „a” jest większe niż „b” (wiersz 7).
  • Linia kodu 10: Jeśli „a” jest większe niż „b”, to warunek w „zagnieżdżony-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ększy” (wiersz 11). W przeciwnym razie, jeśli warunek2 nie powiedzie się, zostanie wydrukowane „C jest największe” (wiersz 13).
  • Linia kodu 18: jeśli warunek 1 zwróci fałsz, to warunek w „zagnieżdżonym-jeśli 2” sprawdzi, czy „b” jest większe niż „c” (wiersz 18).
  • Linia kodu 21: Jeśli „b” jest większe niż „c”, to zostanie wydrukowany komunikat „B jest największy” (wiersz 19), w przeciwnym razie, jeśli warunek 2 się nie powiedzie, zostanie wydrukowane „C jest największe” (wiersz 21).
  • Linia kodu 24: Drukowanie instrukcji „Program zakończony” (wiersz 24).

Wyjście kodu:

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

Podsumowanie

W tym rozdziale poznaliśmy różne oświadczenia decyzyjne, ich składnię i przykłady. Poniższa tabela zawiera podsumowanie różnych omówionych przez nas instrukcji warunkowych.

RODZAJ

OPIS

STOSOWANIE

JEŚLI NASTĘPNIE

Sprawdza warunek logiczny, czy kod PRAWDA w bloku „TO” zostanie wykonany.

Aby pominąć, / wykonaj określony kod na podstawie warunku.

JEŻELI-TO-INNE

Sprawdza warunek logiczny, czy kod TRUE w bloku „THEN” zostanie wykonany, jeśli zostanie wykonany fałszywy kod w bloku „ELSE”.

Najbardziej odpowiedni w stanie „TO ALBO TO”.

JEŚLI-TO-ELSIF

Sprawdza warunek logiczny w kolejności sekwencyjnej. Pierwszy blok w sekwencji, który zwróci warunek PRAWDA, zostanie wykonany. Jeśli żaden z warunków w sekwencji nie jest PRAWDZIWY, wykonywany jest kod w bloku „ELSE”.

Używane głównie do wyboru z więcej niż dwóch alternatyw.

NESTED-IF

Zezwala na jedną lub więcej instrukcji IF-THEN lub IF-THEN-ELSIF wewnątrz innej instrukcji IF-THEN lub IF-THEN-ELSIF.

Używany głównie w sytuacji zagnieżdżenia.