Nvl opis sql. Transformacje NVL dla różnych typów danych
Funkcje zagnieżdżone poruszyliśmy nieco wcześniej, teraz przyjrzyjmy się im nieco bardziej szczegółowo. Przyjrzymy się również funkcjom do pracy z wartością NULL oraz funkcjom, które pomagają zaimplementować operację rozgałęzienia w zapytaniu.
zagnieżdżone funkcje
Funkcje zagnieżdżone wykorzystują wartość zwracaną przez jedną funkcję jako parametr wejściowy do innej funkcji. Funkcje zawsze zwracają tylko jedną wartość. W związku z tym wynik wywołania funkcji można traktować jako wartość literalną, gdy jest używany jako parametr innego wywołania funkcji. Funkcje wierszowe można zagnieżdżać do dowolnego poziomu zagnieżdżenia. Pojedyncze wywołanie funkcji wygląda tak
Funkcja1(parametr1, parametr2, …) = wynik
Zastąpienie parametru funkcji wywołaniem innej funkcji może skutkować wyrażeniami takimi jak
F1(parametr1.1, F2(parametr2.1, param2.2, F3(parametr3.1)), param1.3)
Funkcje zagnieżdżone są najpierw oceniane, zanim ich wyniki zostaną użyte jako wartości wejściowe dla innych funkcji. Funkcje są oceniane od najgłębszego poziomu zagnieżdżenia do najwyższego, od lewej do prawej. Poprzednie wyrażenie jest wykonywane w następujący sposób
- Funkcja F3(param1) jest oceniana, a zwracana wartość jest używana jako trzeci parametr dla funkcji 2, nazwijmy ją param2.3
- Następnie następuje ocena funkcji F2(param1, param2.2, param2.3) i zwrócona wartość jest wykorzystywana jako drugi parametr funkcji F1 - param1.2
- Na koniec funkcja F1(param1, param2, param1.3) jest oceniana i wynik jest zwracany do programu wywołującego.
Zatem funkcja F3 jest na trzecim poziomie zagnieżdżenia.
Rozważ zapytanie
wybierz next_day(last_day(sysdate)-7, 'tue') z dual;
- W tym zapytaniu są trzy funkcje, od dołu do góry - SYSDATE, LAST_DAY, NEXT_DAY. Żądanie jest wykonane w ten sposób
- Wykonywana jest zagnieżdżona funkcja SYSDATE. Zwraca bieżący czas systemowy. Załóżmy, że bieżąca data to 28 października 2009 r
- Następnie obliczany jest wynik funkcji drugiego poziomu LAST_DAY. LAST_DATE('28-OCT-2009') zwraca ostatni dzień października 2009, tj. 31 października 2009.
- Następnie od tej daty odejmuje się siedem dni - uzyskuje się 24 października.
- Na koniec funkcja NEXT_DAY('24-OCT-2009', 'tue') jest oceniana i zapytanie zwraca ostatni wtorek października, czyli w naszym przykładzie 27-OCT-2009.
Zrozumienie i zbudowanie złożonych wyrażeń przy użyciu wielu zagnieżdżonych wywołań funkcji jest dość trudne, ale przychodzi to z czasem i praktyką. Możesz podzielić takie wyrażenia na części i przetestować osobno. Tabela DUAL jest bardzo przydatna do testowania zapytań i wyników wywołań funkcji. Możesz testować i debugować małe komponenty, które są następnie łączone w jedno duże pożądane wyrażenie.
Funkcje gałęzi
Funkcje rozgałęziające, znane również jako JEŻELI-TO-INNE, służą do określenia ścieżki wykonania w zależności od pewnych okoliczności. Funkcje rozgałęziające zwracają różne wyniki w zależności od wyniku oceny warunku. W grupie takich funkcji znajdują się funkcje do pracy z wartością NULL: NVL, NVL2, NULLIF i COALESCE. A także ogólne funkcje reprezentowane przez funkcję DECODE i wyrażenie CASE. Funkcja DECODE jest funkcją Oracle, natomiast wyrażenie CASE jest w standardzie ANSI SQL.
funkcja NVL
Funkcja NVL sprawdza wartość kolumny lub wyrażenia dowolnego typu danych pod kątem wartości null. Jeśli wartością jest NULL, zwracana jest alternatywna wartość domyślna różna od NULL, w przeciwnym razie zwracana jest oryginalna wartość.
Funkcja NVL ma dwa wymagane parametry, a jej składnia to NVL(original, ifnull), gdzie original to oryginalna wartość do sprawdzenia, a ifnull to wynik zwracany przez funkcję, jeśli original to NULL. Typ danych parametrów ifnull i oryginalnych musi być zgodny. Oznacza to, że albo typ danych musi być taki sam, albo musi istnieć możliwość niejawnej konwersji wartości z jednego typu na inny. Funkcja NVL zwraca wartość tego samego typu danych, co typ danych pierwotnego parametru. Rozważ trzy zapytania
Zapytanie 1: wybierz nvl(1234) z dual;
Zapytanie 2: wybierz nvl (null, 1234) z dual;
Zapytanie 3: wybierz nvl(substr('abc', 4), 'Nie istnieje podciąg') z dual;
Ponieważ funkcja NVL wymaga dwóch parametrów, zapytanie 1 zwróci ORA-00909: błąd nieprawidłowej liczby argumentów. Zapytanie 2 zwróci 1234, ponieważ sprawdzane jest NULL i ma ono wartość NULL. Zapytanie trzecie używa zagnieżdżonej funkcji SUBSTR, która próbuje wyodrębnić czwarty znak z trzyznakowego łańcucha, zwraca wartość NULL, a funkcja NVL zwraca ciąg „No sbusting istnieć”.
Funkcja NVL jest bardzo przydatna podczas pracy z liczbami. Służy do konwersji wartości NULL na 0, aby operacje arytmetyczne na liczbach nie zwracały wartości NULL.
funkcja NVL2
Funkcja NVL2 zapewnia większą funkcjonalność niż NVL, ale służy również do przetwarzania wartości NULL. Sprawdza wartość kolumny lub wyrażenia dowolnego typu pod kątem wartości null. Jeśli wartość nie jest NULL, zwracany jest drugi parametr, w przeciwnym razie zwracany jest trzeci parametr, w przeciwieństwie do funkcji NVL, która w tym przypadku zwraca pierwotną wartość.
Funkcja NVL2 ma trzy wymagane parametry, a jej składnia to NVL2(original, ifnotnull, ifnull), gdzie original to testowana wartość, ifnotnull to wartość do zwrócenia, jeśli oryginał nie jest NULL, a ifnull to wartość do zwrócenia, jeśli oryginał to ZERO. Typy danych parametrów ifnotnull i ifnull muszą być zgodne i nie mogą być typu LONG. Typ danych zwracany przez funkcję NVL2 jest równy typowi danych parametru ifnotnull. Spójrzmy na kilka przykładów
Zapytanie 1: wybierz nvl2(1234, 1, 'a string') z dual;
Zapytanie 2: wybierz nvl2 (null, 1234, 5678) z podwójnego;
Zapytanie 3: wybierz nvl2(substr('abc', 2), 'Not bc', 'No substring') z dual;
Parametr ifnotnull w zapytaniu 1 jest liczbą, a parametr ifnull jest ciągiem znaków. Ponieważ typy danych są niezgodne, zwracany jest błąd „ORA-01722: nieprawidłowy numer”. Zapytanie drugie zwraca parametr ifnull, ponieważ oryginał ma wartość NULL, a wynikiem jest 5678. Zapytanie trzecie używa funkcji SUBSTR, która zwraca 'bc' i wywołuje NVL2('bc','Not bc','No substring') - która zwraca ifnotnull parametr – „Nie bc”.
Funkcja NULLIF
Funkcja NULLIF sprawdza dwie wartości pod kątem tego samego. Jeśli są takie same, zwracana jest wartość NULL, w przeciwnym razie zwracany jest pierwszy parametr. Funkcja NULLIF ma dwa wymagane parametry, a składnia to NULLIF(ifunequal, element_porównania). Funkcja porównuje dwa parametry i jeśli są one identyczne, zwraca NULL, w przeciwnym razie parametr ifunequal. Rozważ zapytania
Zapytanie 1: wybierz nullif (1234, 1234) z dual;
Zapytanie pierwsze zwraca NULL, ponieważ parametry są identyczne. Ciągi w zapytaniu 2 nie są konwertowane na datę, ale są porównywane jako ciągi. Ponieważ łańcuchy mają różną długość, zwracany jest parametr ifunequal 24-JUL-2009.
Na rysunku 10.4 funkcja NULLIF jest zagnieżdżona w funkcji NVL2. Z kolei funkcja NULLIF używa funkcji SUBSTR i UPPER jako części wyrażenia w parametrze ifunequal. Kolumna EMAIL jest porównywana z tym wyrażeniem, które zwraca pierwszą literę imienia połączoną z nazwiskiem dla pracowników, których imię ma długość 4 znaków. Gdy te wartości są równe, NULLIF zwróci NULL, w przeciwnym razie zwróci wartość parametru ifunequal. Te wartości są używane jako parametr dla funkcji NVL2. NVL2 z kolei zwraca opis, czy porównywane elementy pasują, czy nie.
Rysunek 10-4 — Korzystanie z funkcji NULLIF
Funkcja COALESCE
Funkcja COALESCE zwraca pierwszą wartość inną niż NULL z listy parametrów. Jeśli wszystkie parametry mają wartość NULL, zwracana jest wartość NULL. Funkcja COALESCE ma dwa wymagane parametry i dowolną liczbę parametrów opcjonalnych, a składnia to COALESCE(wyr1, wyr2, ..., wyrn) gdzie wynikiem jest wyr1, jeśli wartość wyr 1 nie jest NULL, w przeciwnym razie wynikiem jest wyr2 jeśli nie jest NULL i tak dalej. COALESCE ma znaczenie równe zagnieżdżonym funkcjom NVL
COALESCE(wyr1, wyr2) = NVL(wyr1, wyr2)
COALESCE(wyr1, wyr2, wyr3) = NVL(wyr1,NVL(wyr2, wyr3))
Typ danych zwróconej wartości, jeśli zostanie znaleziona wartość inna niż NULL, jest równy typowi danych pierwszej wartości innej niż NULL. Aby uniknąć błędu „ORA-00932: niezgodne typy danych”, wszystkie parametry inne niż NULL muszą być zgodne z pierwszym parametrem innym niż NULL. Rozważ trzy przykłady
Zapytanie 1: wybierz połączenie (null, null, null, 'a string') z dual;
Zapytanie 2: wybierz połączenie (null, null, null) z dual;
Zapytanie 3: wybierz połączenie(substr('abc', 4), 'Not bc', 'No substring') z dual;
Zapytanie 1 zwraca czwarty parametr: łańcuch, ponieważ jest to pierwszy parametr inny niż NULL. Zapytanie drugie zwraca wartość NULL, ponieważ wszystkie parametry mają wartość NULL. Zapytanie 3 ocenia pierwszy parametr, otrzymuje NULL i zwraca drugi parametr, ponieważ jest to pierwszy parametr inny niż NULL.
Parametry funkcji NVL2 mogą być mylące, jeśli znasz już funkcję NVL. NVL(original, ifnull) zwraca oryginał, jeśli wartość nie jest NULL, w przeciwnym razie ifnull. NVL2(original, ifnotnull, ifnull) zwraca ifnotnull, jeśli oryginał nie jest pusty, w przeciwnym razie ifnull. Zamieszanie wynika z faktu, że drugim parametrem funkcji NVL jest ifnull, podczas gdy NVL2 ma ifnotnull. Więc nie polegaj na pozycji parametru w funkcji.
funkcja DECO
Funkcja DECODE implementuje logikę if-then-else, sprawdzając pierwsze dwa parametry pod kątem równości i zwracając trzecią wartość, jeśli są równe, lub inną wartość, jeśli nie. Funkcja DECODE ma trzy wymagane parametry, a jej składnia to DECODE(wyr1, komp1, jeśliprawda1, , ). Te parametry są używane, jak pokazano w poniższym przykładzie pseudokodu.
JEŚLI wyrażenie1=komp1 to zwróć jeśliprawda1
W przeciwnym razie, jeśli expr1=comp2, zwróć iftrue2
W przeciwnym razie, jeśli exprN=compN, zwróć iftrueN
Inaczej zwróć NULL|iffalse;
Najpierw porównuje się expr1 z comp1. Jeśli są równe, zwracane jest iftrue1. Jeśli expr1 nie jest równe comp1, to, co dzieje się dalej, zależy od tego, czy określono parametry comp2 i iftrue2. Jeśli podano, to wartość expr1 jest porównywana z comp2. Jeśli wartości są równe, zwracane jest iftrue2. Jeśli nie, to jeśli istnieją pary parametrów compN, iftrueN, expr1 i compN są porównywane, a jeśli true, zwracane jest iftrueN, jeśli jest równe. Jeśli w żadnym zestawie parametrów nie znaleziono dopasowania, zwracana jest wartość iffalse, jeśli określono ten parametr, lub NULL.
Wszystkie parametry w funkcji DECODE mogą być wyrażeniami. Typ zwracanej wartości jest równy typowi pierwszego walidatora - parametru komp 1. Wyrażenie wyr 1 niejawnie konwertuje na typ danych parametru comp1. Wszystkie inne dostępne opcje komp 1 … komp są również niejawnie konwertowane na typ comp 1. DECODE traktuje wartość NULL jako równą innej wartości NULL, tj. jeśli expr1 ma wartość NULL, a comp3 ma wartość NULL, a comp2 nie ma wartości NULL, to zwracana jest wartość iftrue3. Spójrzmy na kilka przykładów
Zapytanie 1: wybierz dekodowanie (1234, 123, „123 to dopasowanie”) z dual;
Zapytanie 2: wybierz dekodowanie (1234, 123, „123 to dopasowanie”, „Brak dopasowania”) z dual;
Zapytanie 3: wybierz decode('search', 'comp1', 'true1', 'comp2', 'true2', 'search', 'true3', substr('2search', 2, 6), 'true4', ' false') z podwójnego;
Pierwsze zapytanie porównuje wartości 1234 i 123. Ponieważ nie są one równe, iftrue1 jest ignorowane, a ponieważ iffalse nie jest zdefiniowane, zwracana jest wartość NULL. Zapytanie drugie jest identyczne z zapytaniem 1, z tą różnicą, że zdefiniowana jest wartość iffalse. Ponieważ 1234 nie jest równe 123, iffalse - zwracany jest „Brak dopasowania”. Zapytanie trzecie sprawdza wartości parametrów względem wartości wyszukiwania. Parametry comp1 i comp2 nie są równe "search", więc wyniki iftrue1 i iftrue2 są pomijane. Znaleziono dopasowanie w trzeciej operacji porównywania elementów comp3 (pozycja parametru 6), a zwracaną wartością iftrue3 (parametr 7) jest „true3”. Po znalezieniu dopasowania nie są wykonywane żadne dalsze obliczenia. Oznacza to, że pomimo faktu, że wartość comp4 (parametr 8) jest również zgodna z expr1, to wyrażenie nigdy nie jest oceniane, ponieważ dopasowanie zostało znalezione w poprzednim porównaniu.
wyrażenie CASE
Wszystkie języki programowania trzeciej i czwartej generacji implementują konstrukcję case. Podobnie jak funkcja DECODE, wyrażenie CASE umożliwia implementację logiki if-then-else. Istnieją dwie możliwości użycia wyrażenia CASE. Prosta instrukcja CASE ustawia element źródłowy do porównania raz, a następnie wyświetla listę wszystkich niezbędnych warunków testowych. Złożony (przeszukiwany) CASE ocenia obie instrukcje dla każdego warunku.
Wyrażenie CASE ma trzy wymagane parametry. Składnia wyrażenia zależy od typu. Dla prostego wyrażenia CASE wygląda to tak
Wyrażenie_wyszukiwane CASE
KIEDY wyrażenie_porównawcze1 THEN iftrue1
)
Funkcja TRUNC zwraca liczbę n obciętą do m miejsc dziesiętnych. Parametr m można pominąć, w którym to przypadku n jest obcinane do liczby całkowitej.
WYBIERZ TRUNC(100,25678) X1, TRUNC(-100,25678) X2, TRUNC(100,99) X3,
TRUNC(100,25678; 2) X4
Z PODWÓJNEGO
Funkcja ZNAK(n).
Funkcja SIGN określa znak liczby. Jeśli n jest dodatnie, funkcja zwraca 1. Jeśli jest ujemne, zwraca -1. Jeśli wynosi zero, zwracane jest 0. Na przykład:
WYBIERZ ZNAK(100,22) X1, ZNAK(-100,22) X2, ZNAK(0) X3
Z PODWÓJNEGO
Ciekawą cechą tej funkcji jest możliwość przekazania m równego zeru bez błędu dzielenia przez 0.
Funkcja POTĘGA(n, m).
Funkcja POWER podnosi liczbę n do potęgi m. Stopień może być ułamkowy i ujemny, co znacznie rozszerza możliwości tej funkcji.
WYBIERZ MOC (10, 2) X1, MOC (100, 1/2) X2,
MOC (1000; 1/3) X3, MOC (1000; -1/3) X4
Z PODWÓJNEGO
X1 | X2 | X3 | X4 |
100 | 10 | 10 | 0,1 |
W niektórych przypadkach podczas wywoływania tej funkcji może wystąpić wyjątek. Na przykład:
WYBIERZ MOC (-100, 1/2) X2
Z PODWÓJNEGO
W takim przypadku podejmowana jest próba obliczenia pierwiastka kwadratowego z liczby ujemnej, co spowoduje błąd ORA-01428 „Argument poza zakresem”.
Funkcja PRÓB(n)
Ta funkcja zwraca pierwiastek kwadratowy z n. Na przykład:
WYBIERZ PIERW.(100) X
Z PODWÓJNEGO
EXP(n) i LN(n).
Funkcja EXP podnosi e do potęgi n, a funkcja LN oblicza logarytm naturalny z n (gdzie n musi być większe od zera). Przykład:
WYBIERZ EXP(2) X1, LN(1) X2, LN(EXP(2)) X3
Funkcja TO_CHAR z liczbami
Funkcje do konwersji danych na inne typy danych. TO_CHAR(liczba) konwertuje liczbę na tekst. TO_NUMBER(ciąg znaków) konwertuje tekst na liczbę.
SELECT TO_CHAR (123) FROM DUAL zwróci ciąg 123, SELECT TO_NUMBER (`12345") FROM DUAL zwróci liczbę 12345.
Praca laboratoryjna. Zmiana formatu numerów wyjściowych
Zmiany formatu numerycznego w Oracle SQL, funkcja TO_CHAR do pracy z wartościami numerycznymi.
Ćwiczenia:
Napisz zapytanie wyświetlające informacje o imieniu, nazwisku i wynagrodzeniu pracowników z tabeli hr.employees w formacie pokazanym na rysunku 1. 3.4-1:
Ryż. 3.4 -1
Jednocześnie dane należy posortować w taki sposób, aby w pierwszej kolejności wyświetlały się wiersze dla pracowników z najwyższym wynagrodzeniem.
Notatka:
Niektóre wartości wynagrodzeń na ryc. 3.4-1 zostały zmienione, więc mogą nie pasować do Twoich wartości.
Rozwiązanie:
WYBIERZ imię jako „Imię”, nazwisko jako „Nazwisko”, TO_CHAR(SALARY, „L999999999.99”) Jako „Wynagrodzenie” OD hr.pracownicy ORDER BY SALARY DESC.
Funkcje TO_NUMBER i TO_DATE
Funkcja konwertująca ciąg znaków na datę TO_DATE(ciąg znaków, format). Możliwe wartości formatu zostały już omówione powyżej, więc podam kilka przykładów wykorzystania tej funkcji. Przykłady:
WYBIERAĆ TO_DATE("01.01.2010", `DD.MM.RRRR") Z DUAL zwróci datę `01.01.2010";
WYBIERAĆ TO_DATE("01.STYCZ.2010",`DD.PON.RRRR") Z DUAL zwróci datę `01.01.2009";
WYBIERAĆ TO_DATE("15-01-10",`DD-MM-RR") Z DUAL zwróci datę „01/15/2010”.
Funkcja konwertująca ciąg znaków na wartość numeryczną TO_NUMBER (ciąg znaków, format). Najpopularniejsze wartości formatu są wymienione w tabeli, więc rozważmy użycie tej funkcji na przykładach. Przykłady:
WYBIERAĆ TO_NUMBER(`100") Z DUAL zwróci liczbę 100 SELECT TO_NUMBER(`0010.01", "9999D99") Z DUAL zwróci liczbę 10.01;
WYBIERAĆ TO_NUMBER("500 000", "999G999") Z DUAL zwróci liczbę 500000.
Element RR w formacie daty
Element formatu daty i czasu RR jest podobny do elementu formatu daty i czasu YY, ale zapewnia dodatkową elastyczność przechowywania wartości dat w innych stuleciach. Element formatu datetime RR umożliwia przechowywanie dat XX wieku w XXI wieku poprzez określenie tylko dwóch ostatnich cyfr roku.
Jeśli dwie ostatnie cyfry bieżącego roku wynoszą od 00 do 49, to zwrócony rok ma takie same dwie pierwsze cyfry jak bieżący rok.
Jeśli dwie ostatnie cyfry bieżącego roku mieszczą się w przedziale od 50 do 99, to pierwsze 2 cyfry zwróconego roku są o 1 większe niż pierwsze 2 cyfry bieżącego roku.
Jeśli dwie ostatnie cyfry bieżącego roku to liczby od 00 do 49, to pierwsze 2 cyfry zwróconego roku są o 1 mniejsze niż pierwsze 2 cyfry bieżącego roku.
Jeśli dwie ostatnie cyfry bieżącego roku mieszczą się w przedziale od 50 do 99, zwracany rok ma takie same pierwsze dwie cyfry jak rok bieżący.
funkcja NVL
Funkcja NVL jest na ogół najczęściej używana. Funkcja otrzymuje dwa parametry: NVL(wyr1, wyr2). Jeśli pierwszy parametr expr1 nie ma wartości NULL, funkcja zwraca jego wartość. Jeśli pierwszy parametr ma wartość NULL, funkcja zamiast tego zwraca wartość drugiego parametru exp2.
Przykład: Wybierz NVL (miasto_dostawcy, nie dotyczy") spośród dostawców:
W powyższej instrukcji SQL zwróci n/", jeśli pole miasto_dostawcy zawiera wartość pustą. W przeciwnym razie zwróci wartość miasto_dostawcy.
Innym przykładem użycia funkcji NVL w Oracle/PLSQL jest:
wybierz identyfikator_dostawcy, NVL (opis_dostawcy, nazwa_dostawcy) spośród dostawców.
Ta instrukcja SQL powróci Nazwa Dostawcy pole jeśli dostawca_opis zawiera wartość null. W przeciwnym razie wróci dostawca_opis.
Ostatni przykład: użycie funkcji NVL w Oracle/PLSQL to: wybierz NVL(prowizja, 0) ze sprzedaży;
Ta instrukcja SQL zwróciła wartość 0 if zamawiać pole zawiera wartość null. Inaczej by wrócił prowizje pole.
Transformacje NVL dla różnych typów danych
Aby przekonwertować niezdefiniowaną wartość na wartość rzeczywistą, użyj funkcji NVL: NVL ( wyrażenie1, wyrażenie2), Gdzie:
wyrażenie1- Oryginalna lub obliczona wartość, która może mieć wartość null.
wyrażenie2— Wartość, która jest zastępowana wartością pustą.
Notatka: Funkcji NVL można użyć do konwersji dowolnego typu danych, ale wynik zawsze będzie tego samego typu co wyrażenie1.
Konwersja NVL dla różne rodzaje:
NUMBER-NVL (kolumna liczbowa, 9).
CHAR lub VARCHAR2 - NVL (znaki|kolumna,"Niedostępne").
Praca laboratoryjna. Stosowanie funkcji NVL
Funkcja NVL do radzenia sobie z wartościami pustymi w Oracle SQL.
Ćwiczenia:
Napisz zapytanie wyświetlające informacje o imionach i nazwiskach pracowników z tabeli hr.employees. oraz stawce prowizji (kolumna COMMISSION_PCT) dla pracownika. W takim przypadku dla tych pracowników, dla których prowizja nie jest zdefiniowana, należy wyświetlić wartość 0. Wynik zapytania powinien być taki sam jak na rys. 3,5-1.
Ryż. 3.5 -1 (wartości wyświetlane od linii 51)
Rozwiązanie:
Odpowiedni kod żądania może wyglądać następująco:
WYBIERZ imię jako „Imię”, nazwisko jako „Nazwisko”, NVL (PROWIZJA_PCT, 0) jako „Stawka prowizji” FROM hr.employees.
funkcja NVL
Funkcja NVL jest na ogół najczęściej używana. Funkcja otrzymuje dwa parametry: NVL(wyr1, wyr2). Jeśli pierwszy parametr expr1 nie ma wartości NULL, funkcja zwraca jego wartość. Jeśli pierwszy parametr ma wartość NULL, funkcja zwraca zamiast tego wartość drugiego parametru expr2.
Rozważać praktyczny przykład. Pole COMM w tabeli EMP może zawierać wartości NULL. Podczas wykonywania zapytania takiego jak:
WYBIERZ EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM
OD SCOTT.EMP
wartość NULL zostanie zastąpiona przez zero. Należy zauważyć, że jeśli wartość jest generowana za pomocą funkcji, przypisywany jest jej alias. Wyniki zapytania będą wyglądać następująco:
EMPNO | NAZWA | KOMUNIKAT | NVL_COMM |
7369 | KOWAL | 0 | |
7499 | ALLEN | 300 | 300 |
7521 | ODDZIAŁ | 500 | 500 |
7566 | JONES | 0 | |
7654 | JASKÓŁKA OKNÓWKA | 1400 | 1400 |
7698 | BLAKE | 0 | |
7782 | CLARK | 0 | |
7839 | KRÓL | 0 | |
7844 | TOKARZ | 0 | 0 |
7900 | JAMES | 0 | |
7902 | BRÓD | 0 | |
7934 | MŁYNARZ | 0 |
CEIL(n) funkcja
Funkcja CEIL zwraca najmniejszą liczbę całkowitą większą lub równą liczbie n przekazanej jako parametr. Na przykład:
WYBIERZ CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4
Z PODWÓJNEGO
LICZBA.CAŁK(n[,m])
Funkcja TRUNC zwraca liczbę n obciętą do m miejsc dziesiętnych. Parametr m można pominąć, w którym to przypadku n jest obcinane do liczby całkowitej.
WYBIERZ TRUNC(100,25678) X1, TRUNC(-100,25678) X2, TRUNC(100,99) X3,
TRUNC(100,25678; 2) X4
Z PODWÓJNEGO
Funkcja ZNAK(n).
Funkcja SIGN określa znak liczby. Jeśli n jest dodatnie, funkcja zwraca 1. Jeśli jest ujemne, zwraca -1. Jeśli wynosi zero, zwracane jest 0. Na przykład:
WYBIERZ ZNAK(100,22) X1, ZNAK(-100,22) X2, ZNAK(0) X3
Z PODWÓJNEGO
Ciekawą cechą tej funkcji jest możliwość przekazania m równego zeru bez błędu dzielenia przez 0.
Funkcja POTĘGA(n, m).
Funkcja POWER podnosi liczbę n do potęgi m. Stopień może być ułamkowy i ujemny, co znacznie rozszerza możliwości tej funkcji.
WYBIERZ MOC (10, 2) X1, MOC (100, 1/2) X2,
MOC (1000; 1/3) X3, MOC (1000; -1/3) X4
Z PODWÓJNEGO
X1 | X2 | X3 | X4 |
100 | 10 | 10 | 0,1 |
W niektórych przypadkach podczas wywoływania tej funkcji może wystąpić wyjątek. Na przykład:
WYBIERZ MOC (-100, 1/2) X2
Z PODWÓJNEGO
W takim przypadku podejmowana jest próba obliczenia pierwiastka kwadratowego z liczby ujemnej, co spowoduje błąd ORA-01428 „Argument poza zakresem”.
Funkcja PRÓB(n)
Ta funkcja zwraca pierwiastek kwadratowy z n. Na przykład:
WYBIERZ PIERW.(100) X
Z PODWÓJNEGO
EXP(n) i LN(n).
Funkcja EXP podnosi e do potęgi n, a funkcja LN oblicza logarytm naturalny z n (gdzie n musi być większe od zera). Przykład:
WYBIERZ EXP(2) X1, LN(1) X2, LN(EXP(2)) X3