NVL konverzie pre rôzne typy údajov. Príkazy vetvenia v príkaze SELECT Popis Oracle nvl

Vnorených funkcií sme sa dotkli o niečo skôr, teraz sa na ne pozrieme trochu podrobnejšie. Zvážime aj funkcie na prácu s hodnotou NULL a funkcie, ktoré pomáhajú implementovať operáciu vetvenia v dotaze.

Vnorené funkcie

Vnorené funkcie používajú návratovú hodnotu jednej funkcie ako vstupný parameter inej funkcie. Funkcie vždy vracajú iba jednu hodnotu. Preto môžete s výsledkom volania funkcie zaobchádzať ako s hodnotovým literálom, keď ho použijete ako parameter volania inej funkcie. Funkcie reťazca môžu byť vnorené do ľubovoľnej úrovne vnorenia. Jedno volanie funkcie vyzerá takto

Funkcia1(parameter1, parameter2, …) = výsledok

Nahradenie parametra funkcie volaním inej funkcie môže viesť k výrazom ako

F1(param1.1, F2(param2.1, param2.2, F3(param3.1)), param1.3)

Vnorené funkcie sa vyhodnotia ako prvé a ich výsledky sa použijú ako vstupné hodnoty pre iné funkcie. Funkcie sa vyhodnocujú od najhlbšej úrovne vnorenia po najvyššiu zľava doprava. Predchádzajúci výraz sa vykoná nasledovne

  1. Funkcia F3(param1) sa vyhodnotí a návratová hodnota sa použije ako tretí parameter pre funkciu 2, nazvime ju param2.3
  2. Potom sa vyhodnotí funkcia F2(param1, param2.2, param2.3) a návratová hodnota sa použije ako druhý parameter funkcie F1 - param1.2
  3. Nakoniec sa vyhodnotí funkcia F1(param1, param2, param1.3) a výsledok sa vráti volajúcemu programu.

Funkcia F3 je teda na tretej úrovni vnorenia.

Zvážme žiadosť

vyberte nasledujúci_deň(posledný_deň(systémový dátum)-7, „utorok“) z duálneho;

  1. V tomto dopyte sú tri funkcie, od nižšej úrovne po vyššiu úroveň - SYSDATE, LAST_DAY, NEXT_DAY. Žiadosť sa vykoná nasledovne
  2. Vykoná sa vnorená funkcia SYSDATE. Vráti aktuálny systémový čas. Povedzme, že aktuálny dátum je 28.10.2009
  3. Ďalej sa vypočíta výsledok funkcie druhej úrovne LAST_DAY. LAST_DATE('28-OCT-2009') vráti posledný deň októbra 2009, ktorým je 31. október 2009.
  4. Potom sa od tohto dátumu odpočíta sedem dní - ukáže sa 24. október.
  5. Nakoniec sa vyhodnotí funkcia NEXT_DAY('24-OCT-2009', 'ut') a dotaz vráti posledný utorok v októbri - čo je v našom príklade 27-OCT-2009.

Je dosť ťažké pochopiť a vytvoriť zložité výrazy pomocou mnohých vnorených volaní funkcií, ale to prichádza s časom a praxou. Takéto výrazy môžete rozdeliť na časti a otestovať ich samostatne. Tabuľka DUAL je veľmi užitočná na testovanie dotazov a výsledkov volania funkcií. Môžete testovať a ladiť malé komponenty, ktoré sa potom spoja do jedného veľkého požadovaného výrazu.

Funkcie vetvenia

Funkcie vetvenia, tiež známe ako IF-THEN-ELSE, sa používajú na určenie cesty vykonávania v závislosti od určitých okolností. Funkcie vetvenia vracajú rôzne výsledky na základe výsledku vyhodnotenia stavu. Skupina takýchto funkcií obsahuje funkcie pre prácu s hodnotou NULL: NVL, NVL2, NULLIF a COALESCE. A tiež bežné funkcie reprezentované funkciou DECODE a výrazom CASE. Funkcia DECODE je funkciou Oracle, zatiaľ čo výraz CASE je prítomný v štandarde ANSI SQL.

Funkcia NVL

Funkcia NVL testuje hodnotu stĺpca alebo výrazu ľubovoľného typu údajov oproti NULL. Ak je hodnota NULL, vráti alternatívnu predvolenú hodnotu, ktorá nie je NULL, inak vráti pôvodnú hodnotu.

Funkcia NVL má dva požadované parametre a syntax je NVL(original, ifnull), kde original je pôvodná hodnota na kontrolu a ifnull je výsledok vrátený funkciou, ak je pôvodná hodnota NULL. Dátový typ parametrov ifnull a pôvodných parametrov musia byť kompatibilné. To znamená, že buď musí byť typ údajov rovnaký, alebo musí byť možné implicitne konvertovať hodnoty z jedného typu na druhý. Funkcia NVL vracia hodnotu rovnakého typu údajov, ako je typ údajov pôvodného parametra. Zoberme si tri otázky

Dotaz 1: vyberte nvl(1234) z dual;

Dotaz 2: vyberte nvl(null, 1234) z dual;

Dotaz 3: vyberte nvl(substr(‚abc‘, 4), ‚Žiadny podreťazec neexistuje‘) z dual;

Keďže funkcia NVL vyžaduje dva parametre, požiadavka 1 vráti chybu ORA-00909: neplatný počet argumentov. Dotaz 2 vráti 1234, pretože je skontrolovaná hodnota NULL a je NULL. Dotaz tri používa vnorenú funkciu SUBSTR, ktorá sa pokúša extrahovať štvrtý znak z reťazca dlhého tri znaky, pričom vracia hodnotu NULL, a funkciu NVL, ktorá vracia reťazec „No sbustring neexistuje“.

Funkcia NVL je veľmi užitočná pri práci s číslami. Používa sa na prevod hodnôt NULL na 0, takže aritmetické operácie s číslami nevracajú hodnotu NULL

Funkcia NVL2

Funkcia NVL2 poskytuje viac funkcií ako NVL, ale slúži aj na spracovanie hodnôt NULL. Testuje hodnotu stĺpca alebo výrazu akéhokoľvek typu oproti NULL. Ak hodnota nie je NULL, potom sa vráti druhý parameter, inak sa vráti tretí parameter, na rozdiel od funkcie NVL, ktorá v tomto prípade vráti pôvodnú hodnotu.

Funkcia NVL2 má tri povinné parametre a syntax je NVL2(original, ifnotnull, ifnull), kde original je testovaná hodnota, ifnotnull je vrátená hodnota, ak original nie je NULL, a ifnull je hodnota vrátená, ak original je NULL. Typy údajov parametrov ifnotnull a ifnull musia byť kompatibilné a nemôžu byť typu LONG. Typ údajov vrátený funkciou NVL2 sa rovná typu údajov parametra ifnotnull. Pozrime sa na niekoľko príkladov

Dotaz 1: vyberte nvl2(1234, 1, ‘reťazec’) z dual;

Dotaz 2: vyberte nvl2(null, 1234, 5678) z dual;

Dotaz 3: vyberte nvl2(substr('abc', 2), 'Nie bc', 'Žiadny podreťazec') z dual;

Parameter ifnotnull v požiadavke 1 je číslo a parameter ifnull je reťazec. Pretože typy údajov sú nekompatibilné, vráti sa chyba „ORA-01722: neplatné číslo“. Dopyt dva vracia parameter ifnull, pretože originál je NULL a výsledok bude 5678. Dopyt tri používa funkciu SUBSTR, ktorá vracia 'bc' a volá NVL2('bc', 'Not bc', 'No substring') - čo vracia parameter ifnotnull – 'Not bc'.

Funkcia NULLIF

Funkcia NULLIF kontroluje, či sú dve hodnoty totožné. Ak sú rovnaké, vráti sa NULL, inak sa vráti prvý parameter. Funkcia NULLIF má dva požadované parametre a syntax je NULLIF(ifunequal, porovnanie_položka). Funkcia porovnáva dva parametre a ak sú totožné, vráti hodnotu NULL, inak je parameter ifunequal. Zvážme žiadosti

Dotaz 1: vyberte nullif(1234, 1234) z dual;

Dotaz 1 vráti NULL, pretože parametre sú identické. Reťazce v dotaze 2 sa neprevádzajú na dátum, ale porovnávajú sa ako reťazce. Keďže reťazce majú rôznu dĺžku, parameter ifunequal sa vráti 24-JUL-2009.

Na obrázku 10-4 je funkcia NULLIF vnorená do funkcie NVL2. Funkcia NULLIF zase používa funkcie SUBSTR a UPPER ako súčasť výrazu v parametri ifunequal. Stĺpec EMAIL sa porovnáva s týmto výrazom, ktorý vracia prvé písmeno krstného mena v kombinácii s priezviskom pre zamestnancov, ktorých krstné meno je dlhé 4 znaky. Keď sú tieto hodnoty rovnaké, NULLIF vráti hodnotu NULL, inak vráti hodnotu parametra ifunequal. Tieto hodnoty sa používajú ako parameter pre funkciu NVL2. NVL2 zase vráti popis, či sa porovnávané prvky zhodovali alebo nie.

Obrázok 10-4 – Použitie funkcie NULLIF

Funkcia COALESCE

Funkcia COALESCE vráti prvú hodnotu, ktorá nie je NULL, zo zoznamu parametrov. Ak sú všetky parametre NULL, vráti sa NULL. Funkcia COALESCE má dva povinné parametre a ľubovoľný počet voliteľných parametrov a syntax je COALESCE(výraz1, výraz2, ..., exrn), kde výsledkom bude výraz výraz1, ak hodnota výrazu 1 nebude NULL, inak bude výsledok expr2 ak nie je NULL atď. COALESCE sa významovo rovná vnoreným funkciám NVL

COALESCE(výraz1; výraz2) = NVL(výraz1; výraz2)

COALESCE(výraz1, výraz2, výraz3) = NVL(výraz1,NVL(výraz2, výraz3))

Typ údajov vrátenej hodnoty, ak sa nájde hodnota iná ako NULL, sa rovná typu údajov prvej hodnoty, ktorá nie je NULL. Aby sa predišlo chybe 'ORA-00932: nekonzistentné typy údajov', všetky parametre, ktoré nie sú NULL, musia byť kompatibilné s prvým parametrom, ktorý nie je NULL. Pozrime sa na tri príklady

Dotaz 1: vyberte coalesce(null, null, null, ‘reťazec’) z dual;

Dotaz 2: vyberte coalesce(null, null, null) z dual;

Dotaz 3: vyberte coalesce(substr('abc', 4), 'Nie bc', 'Žiadny podreťazec') z dual;

Dotaz 1 vracia štvrtý parameter: reťazec, keďže ide o prvý parameter, ktorý nemá hodnotu NULL. Dotaz dva vráti hodnotu NULL, pretože všetky parametre sú NULL. Dotaz 3 vyhodnotí prvý parameter, získa hodnotu NULL a vráti druhý parameter, pretože ide o prvý parameter, ktorý nemá hodnotu NULL.

Parametre funkcie NVL2 môžu byť mätúce, ak už poznáte funkciu NVL. NVL(original, ifnull) vráti originál, ak hodnota nie je NULL, inak ifnull. NVL2(original, ifnotnull, ifnull) vráti ifnotnull, ak originál nie je NULL, inak ifnull. Zmätok pochádza zo skutočnosti, že druhý parameter funkcie NVL je ifnull, zatiaľ čo funkcia NVL2 je ifnotnull. Nespoliehajte sa teda na pozíciu parametra vo funkcii.

Funkcia DECODE

Funkcia DECODE implementuje logiku if-then-else testovaním prvých dvoch parametrov na rovnosť a vrátením tretej hodnoty, ak sú rovnaké, alebo inej hodnoty, ak nie sú rovnaké. Funkcia DECODE má tri požadované parametre a syntax je DECODE(výraz1, comp1, iftrue1, , ). Tieto parametre sa používajú tak, ako je uvedené v nasledujúcom príklade pseudokódu

IF expr1=comp1 potom vráťte iftrue1

Inak, ak expr1=comp2, potom vráťte iftrue2

Inak, ak exprN=compN, potom vráťte iftrueN

Else return NULL|iffalse;

Najprv sa porovná expr1 s komp1. Ak sú rovnaké, vráti sa iftrue1. Ak sa expr1 nerovná comp1, potom čo sa stane ďalej závisí od toho, či sú špecifikované parametre comp2 a iftrue2. Ak je zadaná, hodnota expr1 sa porovnáva s hodnotou comp2. Ak sú hodnoty rovnaké, vráti sa iftrue2. Ak nie, potom ak existujú dvojice parametrov compN, porovnávajú sa iftrueN, expr1 a compN a ak sú rovnaké, vráti sa iftrueN. Ak sa v žiadnej skupine parametrov nenašla žiadna zhoda, vráti sa buď hodnota iffalse, ak bol tento parameter zadaný, alebo hodnota NULL.

Všetky parametre vo funkcii DECODE môžu byť výrazy. Typ návratovej hodnoty sa rovná typu prvého validačného prvku - parametra komp 1. Výraz expr 1 sa implicitne skonvertuje na typ údajov parametra comp1. Všetky ostatné dostupné parametre komp 1...kompN sú tiež implicitne prevedené na typ comp 1. DECODE považuje hodnotu NULL za rovnú inej hodnote NULL, t.j. ak výraz1 je NULL a comp3 je NULL a comp2 nie je NULL, vráti sa iftrue3. Pozrime sa na niekoľko príkladov

Dotaz 1: vyberte dekódovať (1234, 123, „123 je zhoda“) z duálneho;

Dotaz 2: vyberte dekódovanie (1234, 123, „123 je zhoda“, „Žiadna zhoda“) z duálneho;

Dotaz 3: select decode('search', 'comp1', 'true1', 'comp2', 'true2', 'search', 'true3', substr('2search', 2, 6), 'true4', ' nepravda') z duálneho;

Dotaz 1 porovnáva hodnoty 1234 a 123. Keďže nie sú rovnaké, iftrue1 sa ignoruje a keďže hodnota iffalse nie je definovaná, vráti sa NULL. Požiadavka dva je identická s požiadavkou 1 okrem toho, že je definovaná hodnota iffalse. Keďže 1234 sa nerovná 123, vráti hodnotu iffalse – „Žiadna zhoda“. Dopyt tri kontroluje hodnoty parametrov, aby sa zhodovali s hľadanou hodnotou. Parametre comp1 a comp2 sa nerovnajú 'search', takže výsledky iftrue1 a iftrue2 sa preskočia. V tretej porovnávacej operácii prvku comp3 (pozícia parametra 6) sa nájde zhoda a vráti sa hodnota iftrue3 (parameter 7), ktorá sa rovná 'true3'. Keďže sa nájde zhoda, už sa nevykonávajú žiadne výpočty. To znamená, že napriek skutočnosti, že hodnota comp4 (parameter 8) sa tiež zhoduje s expr1, tento výraz sa nikdy nevypočíta, pretože zhoda bola nájdená v predchádzajúcom porovnaní.

výraz CASE

Všetky programovacie jazyky tretej a štvrtej generácie implementujú konštrukciu prípadu. Podobne ako funkcia DECODE, aj výraz CASE vám umožňuje implementovať logiku if-then-else. Existujú dve možnosti použitia výrazu CASE. Jednoduchý výraz CASE nastaví zdrojový prvok na jedno porovnanie a potom vypíše všetky potrebné podmienky testu. Komplexný (vyhľadaný) CASE vyhodnotí oba príkazy pre každú podmienku.

Výraz CASE má tri povinné parametre. Syntax výrazu závisí od typu. Pre jednoduchý výraz CASE to vyzerá takto

CASE search_expr

KEĎ porovnanie_výraz1 POTOM iftrue1

)

Funkcia TRUNC vráti číslo n skrátené na m desatinných miest. Parameter m nemusí byť špecifikovaný; v tomto prípade je n skrátené na celé číslo.

SELECT TRUNC(100,25678) X1, TRUNC(-100,25678) X2, TRUNC(100,99) X3,

TRUNC(100,25678; 2) X4

OD DUAL

Funkcia SIGN(n)

Funkcia SIGN určuje znamienko čísla. Ak je n kladné, funkcia vráti 1. Ak je n záporná, vráti -1. Ak sa rovná nule, vráti sa 0. Napríklad:

SELECT SIGN(100,22) X1, SIGN(-100,22) X2, SIGN(0) X3

OD DUAL

Zaujímavou vlastnosťou tejto funkcie je schopnosť prenášať m rovné nule bez spôsobenia chyby delenia 0.

Funkcia POWER(n, m)

Funkcia POWER zvýši číslo n na mocninu m. Stupeň môže byť zlomkový a negatívny, čo výrazne rozširuje možnosti tejto funkcie.

SELECT POWER(10; 2) X1, POWER(100; 1/2) X2,

POWER(1000; 1/3) X3, POWER(1000; -1/3) X4

OD DUAL

X1 X2 X3 X4
100 10 10 0,1

V niektorých prípadoch môže pri volaní tejto funkcie nastať výnimka. Napríklad:

SELECT POWER(-100, 1/2) X2

OD DUAL

V tomto prípade sa pokúsi vypočítať druhú odmocninu záporného čísla, čo bude mať za následok chybu ORA-01428 „Argument mimo rozsah“.

Funkcia SQRT(n)

Táto funkcia vráti druhú odmocninu z n. Napríklad:

SELECT SQRT(100) X

OD DUAL

Funkcie EXP(n) a LN(n).

Funkcia EXP zvýši e na mocninu n a funkcia LN vypočíta prirodzený logaritmus n (n musí byť väčší ako nula). Príklad:

VYBERTE EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

Funkcia NVL

Vo všeobecnosti sa najčastejšie používa funkcia NVL. Funkcia prijíma dva parametre: NVL(výraz1, výraz2). Ak prvý parameter expr1 nie je NULL, funkcia vráti jeho hodnotu. Ak je prvý parameter NULL, funkcia namiesto toho vráti hodnotu druhého parametra expr2.

Pozrime sa na praktický príklad. Pole COMM v tabuľke EMP môže obsahovať hodnoty NULL. Pri vykonávaní dotazu ako:

SELECT EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM

OD SCOTT.EMP

hodnota NULL bude nahradená nulou. Všimnite si, že keď je hodnota generovaná pomocou funkcie, je jej priradený alias. Výsledky dotazu budú vyzerať takto:

EMPNO ENAME COMM NVL_COMM
7369 SMITH 0
7499 ALLEN 300 300
7521 WARD 500 500
7566 JONES 0
7654 MARTIN 1400 1400
7698 BLAKE 0
7782 Clark 0
7839 KRÁĽ 0
7844 SÚSTRUŽNÍK 0 0
7900 JAMES 0
7902 FORD 0
7934 MILLER 0

Funkcia CEIL(n)

Funkcia CEIL vráti najmenšie celé číslo väčšie alebo rovné číslu n odovzdanému ako parameter. Napríklad:

SELECT CEIL(100) X1, CEIL(-100) X2, CEIL(100,2) X3, CEIL(-100,2) X4

OD DUAL

Funkcia TRUNC(n [,m])

Funkcia TRUNC vráti číslo n skrátené na m desatinných miest. Parameter m nemusí byť špecifikovaný; v tomto prípade je n skrátené na celé číslo.

SELECT TRUNC(100,25678) X1, TRUNC(-100,25678) X2, TRUNC(100,99) X3,

TRUNC(100,25678; 2) X4

OD DUAL

Funkcia SIGN(n)

Funkcia SIGN určuje znamienko čísla. Ak je n kladné, funkcia vráti 1. Ak je n záporná, vráti -1. Ak sa rovná nule, vráti sa 0. Napríklad:

SELECT SIGN(100,22) X1, SIGN(-100,22) X2, SIGN(0) X3

OD DUAL

Zaujímavou vlastnosťou tejto funkcie je schopnosť prenášať m rovné nule bez spôsobenia chyby delenia 0.

Funkcia POWER(n, m)

Funkcia POWER zvýši číslo n na mocninu m. Stupeň môže byť zlomkový a negatívny, čo výrazne rozširuje možnosti tejto funkcie.

SELECT POWER(10; 2) X1, POWER(100; 1/2) X2,

POWER(1000; 1/3) X3, POWER(1000; -1/3) X4

OD DUAL

X1 X2 X3 X4
100 10 10 0,1

V niektorých prípadoch môže pri volaní tejto funkcie nastať výnimka. Napríklad:

SELECT POWER(-100, 1/2) X2

OD DUAL

V tomto prípade sa pokúsi vypočítať druhú odmocninu záporného čísla, čo bude mať za následok chybu ORA-01428 „Argument mimo rozsah“.

Funkcia SQRT(n)

Táto funkcia vráti druhú odmocninu čísla n. Napríklad:

SELECT SQRT(100) X

OD DUAL

Funkcie EXP(n) a LN(n).

Funkcia EXP zvýši e na mocninu n a funkcia LN vypočíta prirodzený logaritmus n (n musí byť väčší ako nula). Príklad:

VYBERTE EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

Funkcia TO_CHAR s číslami

Funkcie na konverziu údajov na iné typy údajov. TO_CHAR(číslo) skonvertuje číslo na text. TO_NUMBER(reťazec) skonvertuje text na číslo.

SELECT TO_CHAR (123) FROM DUAL vráti reťazec 123, SELECT TO_NUMBER (`12345“) FROM DUAL vráti číslo 12345.

Laboratórne práce. Zmena formátu výstupného čísla

Zmeny vo formáte číselných hodnôt v Oracle SQL, funkcia TO_CHAR na prácu s číselnými hodnotami.

Cvičenie:

Napíšte dotaz, ktorý by zobrazil informácie o mene, priezvisku a mzde zamestnancov z tabuľky hr.zamestnanci vo formáte znázornenom na obr. 3,4-1:

Ryža. 3.4 -1

V tomto prípade by mali byť údaje zoradené tak, aby sa najprv zobrazili riadky pre zamestnancov s najvyššou mzdou.

Poznámka:

Niektoré hodnoty platov na obr. 3.4-1 boli upravené, takže nemusia byť rovnaké ako vaše hodnoty.

Riešenie:

VYBERTE meno AKO "Meno", priezvisko Ako "Priezvisko", TO_CHAR (PLAT, "L999999999,99") Ako "Plat" OD hr.zamestnancov OBJEDNAŤ PODĽA PLAT.

Funkcie TO_NUMBER a TO_DATE

Funkcia na konverziu reťazca na dátum TO_DATE (reťazec, formát). Možné hodnoty formátu už boli diskutované vyššie, takže uvediem niekoľko príkladov použitia tejto funkcie. Príklady:

VYBRAŤ TO_DATE("01/01/2010", `DD.MM.RRRR") OD DUAL vráti dátum `01/01/2010";

VYBRAŤ TO_DATE("01. JAN. 2010", `DD.MON.YYYY") OD DUAL vráti dátum `01/01/2009";

VYBRAŤ TO_DATE("15-01-10", `DD-MM-RR") OD DUAL vráti dátum `01/15/2010".

Funkcia na prevod reťazca na číselnú hodnotu TO_NUMBER (reťazec, formát). Najbežnejšie hodnoty formátu sú uvedené v tabuľke, takže sa pozrime na použitie tejto funkcie pomocou príkladov. Príklady:

VYBRAŤ TO_NUMBER(`100") OD DUAL vráti číslo 100 SELECT TO_NUMBER (`0010.01", "9999D99") OD DUAL vráti číslo 10,01;

VYBRAŤ TO_NUMBER("500 000"; "999G999") OD DUAL vráti číslo 500 000.

Prvok RR vo formáte dátumu

Prvok formátu dátumu a času RR je podobný prvku formátu dátumu a času YY, ale poskytuje dodatočnú flexibilitu pri ukladaní hodnôt dátumu v iných storočiach. Prvok formátu dátumu a času RR umožňuje ukladať dátumy 20. storočia v 21. storočí zadaním iba posledných dvoch číslic roku.

Ak sú posledné dve číslice aktuálneho roku 00 až 49, vrátený rok má rovnaké prvé dve číslice ako aktuálny rok.

Ak sú posledné dve číslice aktuálneho roku od 50 do 99, potom prvé 2 číslice vráteného roku sú o 1 väčšie ako prvé 2 číslice aktuálneho roku.

Ak sú posledné dve číslice aktuálneho roku 00 až 49, potom prvé 2 číslice vráteného roku sú o 1 menšie ako prvé 2 číslice aktuálneho roku.

Ak sú posledné dve číslice aktuálneho roku od 50 do 99, vrátený rok má rovnaké prvé dve číslice ako aktuálny rok.

Funkcia NVL

Vo všeobecnosti sa najčastejšie používa funkcia NVL. Funkcia dostáva dva parametre: NVL (expr1, expr2). Ak prvý parameter expr1 nie je NULL, funkcia vráti jeho hodnotu. Ak je prvý parameter NULL, funkcia namiesto toho vráti hodnotu druhého parametra expr2.

Príklad: Vyberte NVL (mesto dodávateľa, n/a") od dodávateľov:

Vyššie uvedený príkaz SQL vráti n/", ak pole dodávateľ_mesto obsahuje nulovú hodnotu. V opačnom prípade vráti hodnotu mesto_dodávateľa.

Ďalším príkladom použitia funkcie NVL v Oracle/PLSQL je:

vyberte Supplier_id, NVL (supplier_desc, Supplier_name) z dodávateľov.

Tento príkaz SQL sa vráti meno dodavateľa pole ak Supplier_desc obsahuje hodnotu null. Inak sa to vráti Supplier_desc.

Posledný príklad: Použitie funkcie NVL v Oracle/PLSQL je: vyberte NVL(provízia, 0) z predaja;

Tento príkaz SQL vrátil hodnotu 0 if provízia Pole obsahuje hodnotu null. Inak by sa to vrátilo provízie lúka.

NVL konverzie pre rôzne typy údajov

Ak chcete previesť nulovú hodnotu na skutočnú hodnotu, použite funkciu NVL: NVL ( výraz1, výraz2), Kde:

výraz1- Pôvodná alebo vypočítaná hodnota, ktorá môže byť nedefinovaná.

výraz2- Hodnota, ktorá nahrádza nedefinovanú hodnotu.

Poznámka: Funkciu NVL je možné použiť na konverziu ľubovoľného dátového typu, ale výsledok bude vždy rovnaký ako výraz1.

Konverzia NVL pre rôzne druhy:

ČÍSLO – NVL (číselný stĺpec, 9).

CHAR alebo VARCHAR2 - NVL (znaky|stĺpec,"Nie je k dispozícií").

Laboratórne práce. Pomocou funkcie NVL

Funkcia NVL na prácu s hodnotami null v Oracle SQL.

Cvičenie:

Napíšte dotaz, ktorý zobrazí informácie o mene a priezvisku zamestnanca z tabuľky hr.employees., ako aj sadzbu provízie (stĺpec COMMISSION_PCT) pre zamestnanca. V tomto prípade pre tých zamestnancov, pre ktorých provízia nie je definovaná, musí byť zobrazená hodnota 0. Výsledok požiadavky by mal byť taký, ako je znázornené na obr. 3,5-1.

Ryža. 3.5 -1 (hodnoty zobrazené od riadku 51)

Riešenie:

Zodpovedajúci kód požiadavky môže byť takýto:

SELECT meno_ako "Krstné meno", priezvisko Ako "Priezvisko", NVL (COMMISSION_PCT, 0) Ako "Sadzba provízie" FROM hr.employees.




Hore