Izrazi grananja u izrazu SELECT. NVL konverzije za različite tipove podataka Lab

TO_CHAR funkcija s brojevima

Funkcije za pretvaranje podataka u druge tipove podataka. TO_CHAR (broj) pretvara broj u tekst. TO_NUMBER (niz) pretvara tekst u broj.

SELECT TO_CHAR (123) FROM DUAL će vratiti 12345, SELECT TO_NUMBER (`12345") FROM DUAL će vratiti 12345.

Laboratorijski radovi. Promjena formata prikazanih brojeva

Promjene formata numeričkih vrijednosti u Oracle SQL -u, funkcija TO_CHAR za rad s numeričkim vrijednostima.

Zadatak:

Napišite upit koji prikazuje ime, prezime i podatke o plaći zaposlenika iz tablice hr.employees u formatu prikazanom na slici 1. 3.4-1:

Pirinač. 3.4 -1

U tom slučaju podatke treba sortirati na način da se prikazuju prvi redovi za zaposlenike s najvećom plaćom.

Bilješka:

Neke vrijednosti plata na Sl. 3.4-1 su promijenjene, pa se možda neće podudarati s vašim vrijednostima.

Rešenje:

SELECT first_name AS "First name", last_name Kao "Prezime", TO_CHAR (PLAĆA, "L999999999.99") Kao "Plaća" OD hr.zaposlenih NARUČITE PO PLACI DESC.

TO_NUMBER i TO_DATE funkcije

Funkcija za pretvaranje niza u datum TO_DATE (niz, format). Moguće vrijednosti formata već su raspravljane gore, pa ću navesti nekoliko primjera korištenja ove funkcije. Primjeri:

SELECT TO_DATE ("01.01.2010", `DD.MM.GGGGG") FROM DUAL će vratiti datum `01.01.2010";

SELECT TO_DATE ("01.JAN.2010", `DD.MON.YYYY") FROM DUAL će vratiti datum `01.01.2009";

SELECT TO_DATE ("15-01-10", `DD-MM-YY") FROM DUAL će vratiti datum `01/15/2010".

Funkcija za pretvaranje niza u numeričku vrijednost TO_NUMBER (niz, format). Najčešće vrijednosti formata navedene su u tablici, pa pogledajmo primjeru ove funkcije. Primjeri:

SELECT TO_NUMBER (`100") FROM DUAL će vratiti broj 100 SELECT TO_NUMBER (`0010.01", "9999D99") FROM DUAL će vratiti 10.01;

SELECT TO_NUMBER ("500.000", "999G999") FROM DUAL će vratiti 500000.

RR element u formatu datuma

Element formata datuma i vremena RR sličan je elementu formata datuma i vremena YY, ali pruža dodatnu fleksibilnost za spremanje vrijednosti datuma u drugim stoljećima. Element formata RR datuma i vremena omogućuje vam pohranjivanje datuma od 20. do 21. stoljeća navođenjem samo posljednje dvije znamenke godine.

Ako su posljednje dvije znamenke tekuće godine od 00 do 49, tada vraćena godina ima prve dvije znamenke kao i tekuća godina.

Ako su posljednje dvije znamenke tekuće godine između 50 i 99, tada su prve 2 znamenke vraćene godine 1 veće od prve 2 znamenke tekuće godine.

Ako su posljednje dvije znamenke tekuće godine od 00 do 49, tada su prve 2 znamenke vraćene godine 1 manje od prve 2 znamenke tekuće godine.

Ako su posljednje dvije znamenke tekuće godine između 50 i 99, tada vraćena godina ima iste prve dvije znamenke kao i tekuća godina.

NVL funkcija

NVL funkcija se obično najčešće koristi. Funkcija ima dva parametra: NVL (expr1, exp2). Ako prvi parametar expr1 nije NULL, funkcija vraća svoju vrijednost. Ako je prvi parametar NULL, tada funkcija umjesto toga vraća vrijednost drugog parametra exp2.

Primjer: Odaberite NVL (provider_city, n / a ") od dobavljača:

Gornji SQL izraz vratit će n / "ako je provider_city null, u suprotnom će vratiti vraćatel_city.

Drugi primjer korištenja NVL funkcije u Oracle / PLSQL je:

izabrati dobavljač_id, NVL (dobavljač_desc, dobavljač_ime) od dobavljača.

Ovaj SQL izraz će se vratiti Dobavljač Ime polje if supply_desc sadrži nultu vrijednost. U suprotnom će se vratiti supply_desc.

Konačni primjer: upotreba NVL funkcije u Oracle / PLSQL je: odaberite NVL (provizija, 0) od prodaje;

Ovaj SQL izraz vratio je 0 ako proviziju polje sadrži nultu vrijednost. U suprotnom bi se vratio proviziju polje.

NVL konverzije za različite tipove podataka

NVL funkcija se koristi za pretvaranje nedefinirane vrijednosti u stvarnu vrijednost: NVL ( izraz1, izraz 2), gdje:

izraz1- Originalna ili izračunata vrijednost, koja može biti nedefinirana.

izraz2- Vrijednost koja se zamjenjuje za nedefiniranu vrijednost.

Bilješka: NVL funkcija može se koristiti za pretvaranje bilo kojeg tipa podataka, ali rezultat će uvijek biti istog tipa kao izraz1.

Pretvaranje NVL -a za različite vrste:

BROJ - NVL (numerička kolona, 9).

CHAR ili VARCHAR2 - NVL (simboli | stupac,"Nije dostupno").

Laboratorijski radovi. Primjena NVL funkcije

NVL funkcija za rad s null vrijednostima u Oracle SQL -u.

Zadatak:

Napišite upit koji prikazuje podatke o imenima i prezimenima zaposlenih iz tabele, kao i stopu provizije (kolona COMMISSION_PCT) za zaposlenog. U ovom slučaju, za one zaposlenike za koje provizija nije definirana morate prikazati vrijednost 0. Rezultat upita trebao bi biti isti kao što je prikazano na Sl. 3.5-1.

Pirinač. 3.5 -1 (prikazuje vrijednosti koje počinju u retku 51)

Rešenje:

Odgovarajući kôd zahtjeva može biti sljedeći:

SELECT first_name AS “First name”, last_name Kao “Prezime”, NVL (COMMISSION_PCT, 0) Kao “Provizija” OD hr.zaposlenih.

NVL funkcija

NVL funkcija se obično najčešće koristi. Funkcija ima dva parametra: NVL (expr1, expr2). Ako prvi parametar expr1 nije NULL, funkcija vraća svoju vrijednost. Ako je prvi parametar NULL, tada funkcija umjesto toga vraća vrijednost drugog parametra expr2.

Razmislite praktičan primjer... COMM polje u EMP tablici može sadržavati NULL vrijednosti. Prilikom izvršavanja upita poput:

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

FROM SCOTT.EMP

vrijednost NULL bit će zamijenjena nulom. Imajte na umu da ako generirate vrijednost pomoću funkcije, njoj se dodjeljuje pseudonim. Rezultati upita će izgledati ovako:

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 KING 0
7844 TURNER 0 0
7900 JAMES 0
7902 FORD 0
7934 MILLER 0

CEIL (n) funkcija

CEIL funkcija vraća najmanji cijeli broj veći ili jednak broju n koji je proslijeđen kao parametar. Na primjer:

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

DUAL

TRUNC funkcija (n [, m])

Funkcija TRUNC vraća broj n, okrnjen na m decimalnih mjesta. Parametar m se može izostaviti - u ovom slučaju, n je skraćeno na cijeli broj.

SELECT TRUNC (100.25678) X1, TRUNC (-100.25678) X2, TRUNC (100.99) X3,

TRUNC (100.25678, 2) X4

DUAL

SIGN (n) funkcija

Funkcija SIGN određuje predznak broja. Ako je n pozitivno, funkcija vraća 1. Ako je n negativno, vraća se -1. Ako je jednako nuli, vraća se 0. Na primjer:

ODABERI ZNAK (100.22) X1, ZNAK (-100.22) X2, ZNAK (0) X3

DUAL

Zanimljiva značajka ove funkcije je mogućnost prolaska m jednakog nuli - u ovom slučaju nema podjele s greškom 0.

POWER (n, m) funkcija

Funkcija POWER podiže n na m snagu. Stupanj može biti djelimičan ili negativan, što značajno proširuje mogućnosti ove funkcije.

ODABERITE SNAGU (10, 2) X1, SNAGU (100, 1/2) X2,

SNAGA (1000, 1/3) X3, SNAGA (1000, -1/3) X4

DUAL

X1 X2 X3 X4
100 10 10 0,1

U nekim slučajevima, prilikom pozivanja ove funkcije može doći do iznimke. Na primjer:

ODABERITE SNAGU (-100, 1/2) X2

DUAL

IN ovaj slučaj pokušava se izračunati kvadratni korijen negativnog broja, što će rezultirati greškom ORA-01428 "Argument izvan raspona".

SQRT (n) funkcija

Ova funkcija se vraća Kvadratni korijen od broja n. Na primjer:

SELECT SQRT (100) X

DUAL

EXP (n) i LN (n) funkcije

EXP funkcija podiže e na stepen n, a LN funkcija izračunava prirodni logaritam od n (gdje n mora biti veće od nule). Primjer:

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

NVL funkcija

NVL funkcija se obično najčešće koristi. Funkcija ima dva parametra: NVL (expr1, expr2). Ako prvi parametar expr1 nije NULL, funkcija vraća svoju vrijednost. Ako je prvi parametar NULL, tada funkcija umjesto toga vraća vrijednost drugog parametra expr2.

Pogledajmo praktičan primjer. COMM polje u EMP tablici može sadržavati NULL vrijednosti. Prilikom izvršavanja upita poput:

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

FROM SCOTT.EMP

vrijednost NULL bit će zamijenjena nulom. Imajte na umu da ako generirate vrijednost pomoću funkcije, njoj se dodjeljuje pseudonim. Rezultati upita će izgledati ovako:

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 KING 0
7844 TURNER 0 0
7900 JAMES 0
7902 FORD 0
7934 MILLER 0

CEIL (n) funkcija

CEIL funkcija vraća najmanji cijeli broj veći ili jednak broju n koji je proslijeđen kao parametar. Na primjer:

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

DUAL

TRUNC funkcija (n [, m])

Funkcija TRUNC vraća broj n, okrnjen na m decimalnih mjesta. Parametar m se može izostaviti - u ovom slučaju, n je skraćeno na cijeli broj.

SELECT TRUNC (100.25678) X1, TRUNC (-100.25678) X2, TRUNC (100.99) X3,

TRUNC (100.25678, 2) X4

DUAL

SIGN (n) funkcija

Funkcija SIGN određuje predznak broja. Ako je n pozitivno, funkcija vraća 1. Ako je n negativno, vraća se -1. Ako je jednako nuli, vraća se 0. Na primjer:

ODABERI ZNAK (100.22) X1, ZNAK (-100.22) X2, ZNAK (0) X3

DUAL

Zanimljiva značajka ove funkcije je mogućnost prolaska m jednakog nuli - u ovom slučaju nema podjele s greškom 0.

POWER (n, m) funkcija

Funkcija POWER podiže n na m snagu. Stupanj može biti djelimičan ili negativan, što značajno proširuje mogućnosti ove funkcije.

ODABERITE SNAGU (10, 2) X1, SNAGU (100, 1/2) X2,

SNAGA (1000, 1/3) X3, SNAGA (1000, -1/3) X4

DUAL

X1 X2 X3 X4
100 10 10 0,1

U nekim slučajevima, prilikom pozivanja ove funkcije može doći do iznimke. Na primjer:

ODABERITE SNAGU (-100, 1/2) X2

DUAL

U ovom slučaju pokušava se izračunati kvadratni korijen negativnog broja, što će rezultirati greškom ORA-01428 "Argument izvan raspona".

SQRT (n) funkcija

Ova funkcija vraća kvadratni korijen od n. Na primjer:

SELECT SQRT (100) X

DUAL

EXP (n) i LN (n) funkcije

EXP funkcija podiže e na stepen n, a LN funkcija izračunava prirodni logaritam od n (gdje n mora biti veće od nule). Primjer:

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

Dotaknuli smo se ugniježđenih funkcija nešto ranije, sada ćemo ih razmotriti detaljnije. Također ćemo pogledati funkcije za rad s NULL vrijednostima i funkcije koje pomažu u implementaciji operacije grananja u upitu.

Ugniježđene funkcije

Ugniježđene funkcije koriste povratnu vrijednost jedne funkcije kao ulazni parametar za drugu funkciju. Funkcije uvijek vraćaju samo jednu vrijednost. Prema tome, rezultat poziva funkcije možete tretirati kao doslovnu vrijednost kada ga koristite kao parametar za poziv drugoj funkciji. Ugrađene funkcije mogu biti ugniježđene na bilo kojoj razini ugniježđenja. Jedan poziv funkcije izgleda ovako

Funkcija1 (parametar1, parametar2,…) = rezultat

Zamjena parametra funkcije pozivom na drugu funkciju može rezultirati izrazima poput

F1 (param.1.1, F2 (param2.1, param2.2, F3 (para3.1)), param1.3)

Ugniježđene funkcije se prvo ocjenjuju prije nego što se njihovi rezultati koriste kao ulazi za druge funkcije. Funkcije se procjenjuju od najdubljeg nivoa gniježđenja do najvišeg nivoa gniježđenja slijeva nadesno. Prethodni izraz se izvršava na sljedeći način

  1. Funkcija F3 (param1) se izračunava, a povratna vrijednost se koristi kao treći parametar za funkciju 2, nazovimo je param2.
  2. Zatim se izračunava funkcija F2 (param1, param2.2, param2.3) i povratna vrijednost se koristi kao drugi parametar funkcije F1 - param1.2
  3. Konačno, funkcija F1 (param1, param2, param1.3) se procjenjuje i vraća u pozivni program.

Dakle, funkcija F3 je na trećoj razini ugniježđenja.

Razmotrite zahtjev

odaberite next_day (last_day (sysdate) -7, 'tue') iz dualnog;

  1. U ovom zahtjevu postoje tri funkcije, odozdo prema gore - SYSDATE, LAST_DAY, NEXT_DAY. Zahtev se izvršava na sledeći način
  2. Najviše ugniježđena funkcija SYSDATE se izvršava. Vraća trenutno sistemsko vrijeme. Pretpostavimo da je trenutni datum 28. oktobar 2009
  3. Zatim se izračunava rezultat funkcije drugog nivoa LAST_DAY. LAST_DATE ('28 -OCT -2009 ') vraća zadnji dan oktobra 2009. godine, 31. oktobar 2009. godine.
  4. Zatim se od ovog datuma oduzima sedam dana - ispada 24. oktobar.
  5. Konačno, funkcija NEXT_DAY ('24 -OCT-2009 ',' tue ') se procjenjuje, a upit vraća zadnji utorak u oktobru-što je u našem primjeru 27. OKTOBAR-2009.

Dovoljno je teško razumjeti i izgraditi složene izraze koristeći mnoge pozive ugniježđenih funkcija, ali to dolazi s vremenom i praksom. Takve izraze možete podijeliti na dijelove i zasebno ih testirati. DUAL tablica je vrlo korisna za testiranje upita i pozivanja funkcija. Možete testirati i otklanjati greške u malim komponentama, koje se zatim mogu kombinirati u jedan veliki, željeni izraz.

Funkcije grananja

Funkcije grananja, poznate i kao IF-THEN-ELSE, koriste se za određivanje puta izvršenja na osnovu nekih okolnosti. Funkcije grananja vraćaju različite rezultate na osnovu rezultata evaluacije stanja. U skupini takvih funkcija razlikuju se funkcije za rad s NULL vrijednostima: NVL, NVL2, NULLIF i COALESCE. Također i uobičajene funkcije predstavljene funkcijom DECODE i izrazom CASE. Funkcija DECODE je Oracle funkcija, dok je izraz CASE prisutan u ANSI SQL standardu.

NVL funkcija

NVL funkcija testira vrijednost stupca ili izraza bilo kojeg tipa podataka za NULL. Ako je vrijednost NULL, vraća alternativnu zadanu vrijednost koja nije NULL, u suprotnom se vraća izvorna vrijednost.

NVL funkcija ima dva potrebna parametra, a sintaksa je NVL (original, ifnull) gdje je original izvorna vrijednost koju treba provjeriti, a ako je nula rezultat koji funkcija vraća ako je original NULL. Tip podataka ifnull i izvornih parametara mora biti kompatibilan. To jest, ili tip podataka mora biti isti ili mora biti moguće implicitno pretvoriti vrijednosti iz jednog tipa u drugi. NVL funkcija vraća vrijednost istog tipa podataka kao tip podataka izvornog parametra. Razmotrite tri zahtjeva

Upit 1: odaberite nvl (1234) iz dual;

Upit 2: odaberite nvl (null, 1234) iz dual;

Upit 3: odaberite nvl (podstr ('abc', 4), 'Ne postoji podniz') iz dual;

Budući da funkcija NVL zahtijeva dva parametra, upit 1 će vratiti ORA-00909: pogreška u broju argumenata. Upit 2 će vratiti 1234 budući da je NULL označeno i da je NULL. Upit tri koristi ugniježđenu funkciju SUBSTR koja pokušava izvući četvrti znak iz niza od tri znaka, vraća NULL, a funkcija NVL vraća niz "Ne postoji sbustring".

NVL funkcija je vrlo korisna pri radu s brojevima. Koristi se za pretvaranje NULL vrijednosti u 0 tako da aritmetičke operacije preko brojeva nije vratio NULL

NVL funkcija2

NVL2 pruža više funkcionalnosti od NVL -a, ali također obrađuje NULL vrijednosti. Testira vrijednost stupca ili izraza bilo koje vrste za NULL. Ako vrijednost nije NULL, tada se vraća drugi parametar, u suprotnom se vraća treći parametar, za razliku od funkcije NVL, koja u ovom slučaju vraća izvornu vrijednost.

Funkcija NVL2 ima tri potrebna parametra i sintaksu NVL2 (original, ifnotnull, ifnull), gdje je original vrijednost koju treba provjeriti, ifnotnull je vrijednost koja se vraća ako original nije NULL, a ako je null vrijednost ako je original NULL. Tipovi podataka parametara ifnotnull i ifnull moraju biti kompatibilni i ne mogu biti tipa LONG. Tip podataka koji vraća funkcija NVL2 jednak je tipu podataka parametra ifnotnull. Pogledajmo neke primjere

Upit 1: izaberite nvl2 (1234, 1, 'niz') iz dual;

Upit 2: odaberite nvl2 (null, 1234, 5678) iz dual;

Upit 3: odaberite nvl2 (podstr ('abc', 2), 'Nije bc', 'Bez podniz') iz dual;

Parametar ifnotnull u upitu 1 je broj, a parametar ifnull niz. Budući da su tipovi podataka nekompatibilni, vraća se greška “ORA-01722: nevažeći broj”. Zahtjev dva vraća parametar ifnull, budući da je original NULL, a rezultat je 5678. Zahtjev tri koristi funkciju SUBSTR koja vraća 'bc' i poziva NVL2 ('bc', 'Nije bc', 'Bez podniz') - koja vraća ifnotnull parametar - 'Nije bc'.

NULLIF funkcija

NULLIF funkcija testira dvije vrijednosti za identitet. Ako su isti, vraća se NULL, u suprotnom se vraća prvi parametar. NULLIF funkcija ima dva potrebna parametra i NULLIF sintaksu (ifunequal, compare_item). Funkcija uspoređuje dva parametra i ako su identični - vraća se NULL, u suprotnom parametar ifunequal. Razmotrite zahtjeve

Upit 1: izaberite nullif (1234, 1234) iz dualnog;

Upit jedan vraća NULL jer su parametri identični. Nizovi u upitu 2 se ne pretvaraju u datum, već se upoređuju kao nizovi. Budući da su žice različite dužine, vraća se ako je nejednako 24-JUL-2009.

Na slici 10-4, NULLIF funkcija je ugniježđena unutar NVL2 funkcije. NULLIF funkcija zauzvrat koristi funkcije SUBSTR i UPPER kao dio izraza u parametru ifunequal. Stupac EMAIL se uspoređuje s ovim izrazom, koji vraća prvo slovo imena povezano s prezimenom za zaposlenike čije ime ima 4 znaka. Kada su ove vrijednosti jednake, NULLIF će vratiti NULL, a vrijednost će vratiti vrijednost parametra ifunequal. Ove se vrijednosti koriste kao parametar za funkciju NVL2. NVL2 zauzvrat daje opis da li se upoređene stavke podudaraju ili ne.

Slika 10-4 - Korištenje funkcije NULLIF

COALESCE funkcija

Funkcija COALESCE vraća prvu vrijednost koja nije NULL iz liste parametara. Ako su svi parametri NULL, vraća se NULL. Funkcija COALESCE ima dva potrebna parametra i neobavezne parametre koliko želite, te sintaksu COALESCE (expr1, expr2, ..., exprn) gdje je rezultat expr1 ako izraz nije NULL, u suprotnom se vraća ekspr2 ako nije NULL i tako dalje. COALESCE je jednak ugniježđenim NVL funkcijama

COALESCE (ekspr1, ekspr2) = NVL (ekspr1, ekspr2)

COALESCE (ekspr1, ekspr2, ekspr3) = NVL (ekspr1, NVL (ekspr2, ekspr3))

Tip podataka povratne vrijednosti ako se pronađe vrijednost koja nije NULL jednaka je tipu podataka prve vrijednosti koja nije NULL. Da biste izbjegli grešku 'ORA-00932: nedosljedni tipovi podataka', svi parametri koji nisu NULL moraju biti kompatibilni s prvim parametrom koji nije NULL. Pogledajmo tri primjera

Upit 1: odaberite spajanje (null, null, null, 'niz') iz dual;

Upit 2: odaberite spajanje (null, null, null) iz dual;

Upit 3: odaberite spajanje (podvrsta ('abc', 4), 'Nije bc', 'Bez podniz') iz dual;

Upit 1 vraća četvrti parametar: niz, budući da je ovo prvi parametar koji nije NULL. Upit dva vraća NULL jer su svi parametri NULL. Upit 3 procjenjuje prvi parametar, dobiva NULL vrijednost i vraća drugi parametar, budući da je to prvi parametar koji nije NULL.

Parametri funkcije NVL2 mogu biti zbunjujući ako ste već upoznati s funkcijom NVL. NVL (original, ifnull) vraća original ako vrijednost nije NULL, inače ifnull. NVL2 (original, ifnotnull, ifnull) vraća ifnotnull ako original nije NULL, inače ifnull. Zabuna je posljedica činjenice da je drugi parametar NVL funkcije ifnull, dok je u NVL2 ifnotnull. Zato se ne oslanjajte na položaj parametra u funkciji.

DECODE funkcija

Funkcija DECODE implementira logiku if-then-else provjeravanjem prva dva parametra radi jednakosti i vraćanjem treće vrijednosti ako su jednake, ili druge vrijednosti ako nisu jednake. Funkcija DECODE ima tri potrebna parametra i sintaksu DECODE (expr1, comp1, iftrue1 ,,). Ovi parametri se koriste kako je prikazano u sljedećem primjeru pseudokoda

IF expr1 = comp1 tada vratite iftrue1

Inače, ako je expr1 = comp2, vratite iftrue2

Inače ako je exprN = compN tada vratite iftrueN

Inače vraća NULL | iffalse;

Prvo, expr1 se upoređuje sa comp1. Ako su jednaki, iftrue1 se vraća. Ako expr1 nije jednak comp1, ono što će se sljedeće dogoditi ovisi o tome jesu li specificirani parametri comp2 i iftrue2. Ako je navedena, vrijednost expr1 se uspoređuje sa comp2. Ako su vrijednosti jednake, vraća se iftrue2. Ako nije, onda ako postoje parovi parametara compN, iftrueN, expr1 i compN se uspoređuju i iftrueN se vraća ako je jednako. Ako u bilo kojem skupu parametara nije pronađeno podudaranje, vraća se ili iffalse ako je ovaj parametar naveden, ili NULL.

Svi parametri u funkciji DECODE mogu biti izrazi. Vrsta povratka jednaka je tipu prvog valjanog elementa - parametra comp 1. Izraz expr 1 implicitno se može pretvoriti u tip podataka parametra comp1. Sve ostale dostupne opcije komp 1 ... komp takođe implicitno konvertibilan u comp 1. DECODE tretira NULL vrijednost jednakom drugoj NULL vrijednosti, tj. ako je expr1 NULL, a comp3 NULL, a comp2 nije NULL, tada se vraća iftrue3. Pogledajmo neke primjere

Upit 1: odabir dekodiranja (1234, 123, '123 se podudara') iz dual -a;

Upit 2: odaberite dekodiranje (1234, 123, ‘123 se podudara’, ‘Nema podudaranja’) iz dualnog;

Upit 3: odaberite dekodiranje ('search', 'comp1', 'true1', 'comp2', 'true2', 'search', 'true3', substr ('2search', 2, 6), 'true4', ' false ') iz dualnog;

Prvi upit uspoređuje vrijednosti 1234 i 123. Budući da nisu jednake, iftrue1 se zanemaruje, a budući da nije definirana iffalse vrijednost, vraća se NULL. Zahtjev dva je identičan zahtjevu 1, osim što je navedeno iffalse. Budući da 1234 nije jednako 123, tada se vraća iffalse - ‘Nema podudaranja’. Zahtjev tri provjerava vrijednosti parametara da li se podudaraju s vrijednošću pretraživanja. Parametri comp1 i comp2 nisu 'search' pa se rezultati iftrue1 i iftrue2 preskaču. Podudaranje se nalazi u trećoj usporedbi comp3 (položaj parametra 6), a povratna vrijednost iftrue3 (parametar 7) je 'true3'. Budući da je pronađeno podudaranje, ne vrše se daljnji proračuni. Odnosno, unatoč činjenici da se vrijednost comp4 (parametar 8) također podudara s izrazom expr1, ovaj izraz se nikada ne izračunava jer je pronađeno podudaranje u prethodnom poređenju.

CASE izraz

Svi programski jezici treće i četvrte generacije implementiraju konstrukciju slučaja. Poput funkcije DECODE, izraz CASE vam omogućuje da implementirate logiku ako-onda-drugo. Postoje dvije opcije za korištenje izraza CASE. Jednostavan izraz CASE postavlja izvor za upoređivanje izvora, a zatim navodi sve potrebne uvjete testa. Pretraženi CASE procjenjuje oba izraza za svaki uslov.

CASE izraz ima tri potrebna parametra. Sintaksa izraza ovisi o vrsti. Za jednostavan izraz CASE, to izgleda ovako

CASE search_expr

KADA usporedba_izraz1 ONDA iftrue1

}