1. Czym jest instrukcja warunkowa i jak jej używać w Oracle PL/SQL?
Oracle IF THEN ELSE w PL/SQL to typowa instrukcja warunkowa. Wykonuje blok kodu, jeśli warunek przed blokiem jest spełniony. Jeśli nie jest spełniony mamy do dyspozycji opcjonalne warunki ELSIF i ELSE. Instrukcję IF THEN ELSE w Oracle możemy używać w PL/SQL m. in. w blokach anonimowych, procedurach, funkcjach, triggerach. Składnia PL/SQL If Then Else wygląda następująco:
--tomaszkenig.pl IF warunek_1 THEN {...polecenie wykonywane, gdy warunek_1 jest spełniony - ma wartość TRUE...} [ELSIF warunek_n THEN {...polecenie wykonywane, gdy warunek_n jest spełniony - ma wartość TRUE, a poprzednie warunki FALSE...}] [ELSE {...polecenie wykonywane, gdy żaden z powyższych warunków nie jest spełniony - wszystkie powyższe warunki = FALSE...}] END IF;
2. Przykład z użyciem Oracle IF THEN ELSE
Zróbmy przykład bloku anonimowego z użyciem instrukcji warunkowej. Wprowadź do PL/SQL zmienną liczbową i przypisz do niej dowolną liczbę. Za pomocą instrukcji warunkowej sprawdź, czy liczba jest większa czy mniejsza niż 100. Wynik podaj w formie tekstowej wykorzystując do tego drugą zmienną tekstową. W tym przykładzie użyjemy zarówno Oracle IF jak i ELSE.
--tomaszkenig.pl DECLARE NUM_LICZBA NUMBER; VCH_WYNIK VARCHAR(50); BEGIN NUM_LICZBA:= 123; IF NUM_LICZBA <= 100 THEN VCH_WYNIK:= 'Liczba jest mniejsza lub równa 100'; ELSE VCH_WYNIK:= 'Liczba jest większa od 100'; END IF; DBMS_OUTPUT.PUT_LINE(VCH_WYNIK || ' i wynosi: ' || NUM_LICZBA); END;
Zróbmy kolejny przykład. W przykładzie użyjemy IF, ELSIF, ELSE. Pobierzmy zaokrągloną średnią zarobków z tabeli HR.EMPLOYEES. Za pomocą instrukcji warunkowej sprawdźmy, czy średnia jest mniejsza niż 6000, pomiędzy 6000, a 7000. W innym wypadku średnia jest większa niż 7000. Wynik, tak jak w poprzednim przykładzie podaj w formie słownej. Średnią zaokrąglij do dołu za pomocą funkcji TRUNC().
--tomaszkenig.pl DECLARE NUM_LICZBA NUMBER; VCH_WYNIK VARCHAR(50); BEGIN SELECT TRUNC(AVG(SALARY)) INTO NUM_LICZBA FROM HR.EMPLOYEES; IF NUM_LICZBA < 6000 THEN VCH_WYNIK:= 'Liczba jest mniejsza lub równa 6000'; ELSIF NUM_LICZBA BETWEEN 6000 AND 7000 THEN VCH_WYNIK:= 'Liczba w zakresie od 6000 do 7000'; ELSE VCH_WYNIK:= 'Liczba jest większa od 7000'; END IF; DBMS_OUTPUT.PUT_LINE(VCH_WYNIK || ' i wynosi: ' || NUM_LICZBA); END;
3. Przykład funkcji PL/SQL z użyciem instrukcji IF THEN ELSE Oracle.
W ostatnim przykładzie stwórzmy prostą funkcję Oracle z użyciem instrukcji warunkowej PL/SQL. Poniżej warunki funkcji:
- Funkcja po podaniu wieku w formie liczby od 0 do 100 zwróci wynik, słowny, czy osoba jest pełnoletnia, czy niepełnoletnia.
- Funkcja dla liczb spoza zakresu zwróci komunikat z prośbą o wprowadzenie poprawnej wartości.
- Funkcja dodatkowo zaokrągli wiek do liczby całkowitej w dół. Możemy do tego użyć funkcji TRUNC().
--tomaszkenig.pl CREATE OR REPLACE FUNCTION SPRAWDZ_WIEK(NUM_WIEK IN NUMBER) RETURN VARCHAR IS BEGIN IF TRUNC(NUM_WIEK) > 100 THEN RETURN 'Wprowadź poprawne dane'; ELSIF TRUNC(NUM_WIEK) >= 18 THEN RETURN 'Pełnoletni'; ELSIF TRUNC(NUM_WIEK) < 0 THEN RETURN 'Wprowadź poprawne dane'; ELSIF TRUNC(NUM_WIEK) < 18 THEN RETURN 'Niepełnoletni'; ELSE RETURN 'Coś poszło nie tak'; END IF; END;