Instrucțiuni de ramificare în instrucțiunea SELECT. Conversii NVL pentru diferite tipuri de date

Funcția TO_CHAR cu numere

Funcții pentru conversia datelor în alte tipuri de date. TO_CHAR (număr) convertește un număr în text. TO_NUMBER (șir) convertește textul în număr.

SELECT TO_CHAR (123) FROM DUAL va returna 12345, SELECT TO_NUMBER (`12345") FROM DUAL va returna 12345.

Munca de laborator. Modificarea formatului numerelor afișate

Modificări ale formatului valorilor numerice în funcția Oracle SQL, TO_CHAR pentru lucrul cu valori numerice.

Sarcina:

Scrieți o interogare care afișează numele, prenumele și informațiile salariale pentru angajați din tabelul hr.employees în formatul prezentat în Figura 1. 3.4-1:

Orez. 3.4 -1

În acest caz, datele ar trebui să fie sortate astfel încât primele rânduri să fie afișate pentru angajații cu cel mai mare salariu.

Notă:

Unele valori salariale din Fig. 3.4-1 au fost modificate, deci este posibil să nu se potrivească valorilor dvs.

Soluţie:

SELEGEȚI prenume ca „Prenume”, prenume Ca „Prenume”, TO_CHAR (SALARIU, „L999999999.99”) Ca „Salariu” DE la hr.employees COMANDĂ PRIN SALAR DESC.

Funcții TO_NUMBER și TO_DATE

Funcție pentru conversia unui șir la o dată TO_DATE (șir, format). Valorile de format posibile au fost deja discutate mai sus, așa că voi da câteva exemple de utilizare a acestei funcții. Exemple:

SELECTAȚI TO_DATE („01.01.2010”, `DD.MM.YYYY”) DIN DUAL va returna data `01.01.2010";

SELECTAȚI TO_DATE ("01.JAN.2010", `DD.MON.YYYY") DIN DUAL va returna data `01.01.2009";

SELECTAȚI TO_DATE ("15-01-10", `DD-MM-YY") DIN DUAL va returna data `15.01.2010".

Funcție pentru conversia unui șir la o valoare numerică TO_NUMBER (șir, format). Cele mai frecvente valori ale formatului sunt listate în tabel, deci să analizăm utilizarea acestei funcții prin exemple. Exemple:

SELECTAȚI TO_NUMBER (`100") DIN DUAL va returna numărul 100 SELECT TO_NUMBER (`0010.01", "9999D99") DIN DUAL va reveni 10.01;

SELECTAȚI TO_NUMBER („500.000”, „999G999”) DIN DUAL va returna 500000.

Element RR în format de dată

Elementul formatului datei și orei RR este similar cu elementul formatului datei și orei YR, dar oferă o flexibilitate suplimentară pentru stocarea valorilor datei în alte secole. Elementul format format RR datetime vă permite să stocați date din secolul XX până în secolul XXI specificând doar ultimele două cifre ale anului.

Dacă ultimele două cifre ale anului curent sunt de la 00 la 49, atunci anul returnat are aceleași prime două cifre ca anul curent.

Dacă ultimele două cifre ale anului curent sunt cuprinse între 50 și 99, atunci primele 2 cifre ale anului returnat sunt cu 1 mai mari decât primele 2 cifre ale anului curent.

Dacă ultimele două cifre ale anului curent sunt de la 00 la 49, atunci primele 2 cifre ale anului returnat sunt cu 1 mai puțin decât primele 2 cifre ale anului curent.

Dacă ultimele două cifre ale anului curent sunt cuprinse între 50 și 99, atunci anul returnat are aceleași prime două cifre ca anul curent.

Funcția NVL

Funcția NVL este de obicei cea mai frecvent utilizată. Funcția primește doi parametri: NVL (expr1, exp2). Dacă primul parametru al expr1 nu este NULL, atunci funcția își returnează valoarea. Dacă primul parametru este NULL, atunci funcția returnează valoarea celui de-al doilea parametru exp2.

Exemplu: Selectați NVL (furnizor_city, n / a ") de la furnizori:

Instrucțiunea SQL de mai sus va returna n / "dacă furnizorul_city este nul, altfel va returna furnizorul_city.

Un alt exemplu de utilizare a funcției NVL în Oracle / PLSQL este:

selectați furnizor_id, NVL (furnizor_desc, furnizor_nume) de la furnizori.

Această instrucțiune SQL va reveni numele furnizorului câmp dacă furnizor_desc conține o valoare nulă. Altfel se va întoarce furnizor_desc.

Un ultim exemplu: utilizarea funcției NVL în Oracle / PLSQL este: selectați NVL (comision, 0) din vânzări;

Această instrucțiune SQL a returnat 0 dacă comision câmpul conține o valoare nulă. Altfel, s-ar întoarce comision camp.

Conversii NVL pentru diferite tipuri de date

Funcția NVL este utilizată pentru a converti o valoare nedefinită într-o valoare reală: NVL ( expresie1, expresie 2), Unde:

expresie1- Valoarea originală sau calculată, care poate fi nedefinită.

expresie2- Valoarea care este substituită valorii nedefinite.

Notă: Funcția NVL poate fi utilizată pentru a converti orice tip de date, dar rezultatul va fi întotdeauna același tip ca expresie1.

Conversia NVL pentru diferite tipuri:

NUMĂR - NVL (coloană numerică, 9).

CHAR sau VARCHAR2 - NVL (simboluri | coloană,"Nu este disponibil").

Munca de laborator. Aplicarea funcției NVL

Funcție NVL pentru lucrul cu valori nule în Oracle SQL.

Sarcina:

Scrieți o interogare care afișează informații despre numele și prenumele angajaților de la hr.employees. Tabel, precum și rata comisionului (coloana COMMISSION_PCT) pentru angajat. În acest caz, pentru acei angajați pentru care comisionul nu este definit, trebuie să afișați valoarea 0. Rezultatul interogării ar trebui să fie același ca în fig. 3,5-1.

Orez. 3.5 -1 (arată valorile care încep de la linia 51)

Soluţie:

Codul de solicitare corespunzător poate fi astfel:

SELEGEȚI prenume ca „Prenume”, prenume Ca „Prenume”, NVL (COMMISSION_PCT, 0) Ca „Tarif comision” DE la angajați hr.

Funcția NVL

Funcția NVL este de obicei cea mai frecvent utilizată. Funcția ia doi parametri: NVL (expr1, expr2). Dacă primul parametru al expr1 nu este NULL, atunci funcția își returnează valoarea. Dacă primul parametru este NULL, atunci funcția returnează valoarea celui de-al doilea parametru expr2.

Considera exemplu practic... Câmpul COMM din tabelul EMP poate conține valori NULL. Când executați o interogare precum:

SELECTAȚI EMPNO, ENAME, COMM, NVL (COMM, 0) NVL_COMM

DE LA SCOTT.EMP

valoarea NULL va fi înlocuită cu zero. Rețineți că, dacă generați o valoare utilizând o funcție, i se atribuie un alias. Rezultatele interogării vor arăta astfel:

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 REGE 0
7844 STRUNGAR 0 0
7900 JAMES 0
7902 VAD 0
7934 MILLER 0

Funcția CEIL (n)

Funcția CEIL returnează cel mai mic număr întreg mai mare sau egal cu numărul n trecut ca parametru. De exemplu:

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

DE LA DUAL

Funcția TRUNC (n [, m])

Funcția TRUNC returnează numărul n, trunchiat la m zecimale. Parametrul m poate fi omis - în acest caz, n este trunchiat la un număr întreg.

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

TRUNC (100.25678, 2) X4

DE LA DUAL

Funcția SIGN (n)

Funcția SIGN determină semnul unui număr. Dacă n este pozitiv, funcția returnează 1. Dacă n este negativ, se returnează -1. Dacă este egal cu zero, atunci se returnează 0. De exemplu:

SELECT SIGN (100.22) X1, SIGN (-100.22) X2, SIGN (0) X3

DE LA DUAL

O caracteristică interesantă a acestei funcții este capacitatea de a trece m egal cu zero - în acest caz, nu există o eroare de divizare la 0.

Funcția POWER (n, m)

Funcția POWER ridică n la puterea m. Gradul poate fi fracționat sau negativ, ceea ce extinde semnificativ capacitățile acestei funcții.

SELECTARE PUTERE (10, 2) X1, PUTERE (100, 1/2) X2,

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

DE LA DUAL

X1 X2 X3 X4
100 10 10 0,1

În unele cazuri, la apelarea acestei funcții, poate apărea o excepție. De exemplu:

SELECTARE PUTERE (-100, 1/2) X2

DE LA DUAL

ÎN acest caz se încearcă calcularea rădăcinii pătrate a unui număr negativ, ceea ce va duce la eroarea ORA-01428 „Argument în afara intervalului”.

Funcția SQRT (n)

Această funcție revine Rădăcină pătrată din numărul n. De exemplu:

SELECTAȚI SQRT (100) X

DE LA DUAL

Funcțiile EXP (n) și LN (n)

Funcția EXP ridică e la puterea lui n, iar funcția LN calculează logaritmul natural al lui n (unde n trebuie să fie mai mare decât zero). Exemplu:

SELECTAȚI EXP (2) X1, LN (1) X2, LN (EXP (2)) X3

Funcția NVL

Funcția NVL este de obicei cea mai frecvent utilizată. Funcția ia doi parametri: NVL (expr1, expr2). Dacă primul parametru al expr1 nu este NULL, atunci funcția își returnează valoarea. Dacă primul parametru este NULL, atunci funcția returnează valoarea celui de-al doilea parametru expr2.

Să vedem un exemplu practic. Câmpul COMM din tabelul EMP poate conține valori NULL. Când executați o interogare precum:

SELECTAȚI EMPNO, ENAME, COMM, NVL (COMM, 0) NVL_COMM

DE LA SCOTT.EMP

valoarea NULL va fi înlocuită cu zero. Rețineți că, dacă generați o valoare utilizând o funcție, i se atribuie un alias. Rezultatele interogării vor arăta astfel:

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 REGE 0
7844 STRUNGAR 0 0
7900 JAMES 0
7902 VAD 0
7934 MILLER 0

Funcția CEIL (n)

Funcția CEIL returnează cel mai mic număr întreg mai mare sau egal cu numărul n trecut ca parametru. De exemplu:

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

DE LA DUAL

Funcția TRUNC (n [, m])

Funcția TRUNC returnează numărul n, trunchiat la m zecimale. Parametrul m poate fi omis - în acest caz, n este trunchiat la un număr întreg.

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

TRUNC (100.25678, 2) X4

DE LA DUAL

Funcția SIGN (n)

Funcția SIGN determină semnul unui număr. Dacă n este pozitiv, funcția returnează 1. Dacă n este negativ, se returnează -1. Dacă este egal cu zero, atunci se returnează 0. De exemplu:

SELECT SIGN (100.22) X1, SIGN (-100.22) X2, SIGN (0) X3

DE LA DUAL

O caracteristică interesantă a acestei funcții este capacitatea de a trece m egal cu zero - în acest caz, nu există o eroare de divizare la 0.

Funcția POWER (n, m)

Funcția POWER ridică n la puterea m. Gradul poate fi fracționat sau negativ, ceea ce extinde semnificativ capacitățile acestei funcții.

SELECTARE PUTERE (10, 2) X1, PUTERE (100, 1/2) X2,

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

DE LA DUAL

X1 X2 X3 X4
100 10 10 0,1

În unele cazuri, la apelarea acestei funcții, poate apărea o excepție. De exemplu:

SELECTARE PUTERE (-100, 1/2) X2

DE LA DUAL

În acest caz, se încearcă calcularea rădăcinii pătrate a unui număr negativ, ceea ce va duce la eroarea ORA-01428 „Argument în afara intervalului”.

Funcția SQRT (n)

Această funcție returnează rădăcina pătrată a lui n. De exemplu:

SELECTAȚI SQRT (100) X

DE LA DUAL

Funcțiile EXP (n) și LN (n)

Funcția EXP ridică e la puterea lui n, iar funcția LN calculează logaritmul natural al lui n (unde n trebuie să fie mai mare decât zero). Exemplu:

SELECTAȚI EXP (2) X1, LN (1) X2, LN (EXP (2)) X3

Am atins funcțiile imbricate puțin mai devreme, acum le vom lua în considerare mai detaliat. De asemenea, vom analiza funcțiile pentru a lucra cu valori NULL și funcții care ajută la implementarea operației de ramificare într-o interogare.

Funcții imbricate

Funcțiile imbricate folosesc valoarea returnată a unei funcții ca parametru de intrare la o altă funcție. Funcțiile returnează întotdeauna o singură valoare. Prin urmare, puteți trata rezultatul unui apel de funcție ca o valoare literală atunci când îl utilizați ca parametru la un apel către o altă funcție. Funcțiile în linie pot fi cuibărite la orice nivel de cuibărire. Un apel de funcție arată astfel

Funcția1 (parametru1, parametru2, ...) = rezultat

Înlocuirea unui parametru de funcție cu un apel către o altă funcție poate duce la expresii precum

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

Funcțiile imbricate sunt evaluate mai întâi înainte ca rezultatele lor să fie utilizate ca intrări în alte funcții. Funcțiile sunt evaluate de la cel mai adânc nivel de cuibărire la cel mai înalt nivel de cuibărire de la stânga la dreapta. Expresia anterioară este executată după cum urmează

  1. Funcția F3 (param1) este calculată și valoarea de returnare este utilizată ca al treilea parametru pentru funcția 2, să o numim param2.
  2. Apoi se calculează funcția F2 (param1, param2.2, param2.3) și valoarea de retur este utilizată ca al doilea parametru al funcției F1 - param1.2
  3. În cele din urmă, funcția F1 (param1, param2, param1.3) este evaluată și returnată la programul apelant.

Astfel, funcția F3 se află la al treilea nivel de cuibărire.

Luați în considerare solicitarea

selectați next_day (last_day (sysdate) -7, ‘mar’) din dual;

  1. Există trei funcții în această solicitare, de jos în sus - SYSDATE, LAST_DAY, NEXT_DAY. Cererea este executată după cum urmează
  2. Cea mai imbricata functie SYSDATE este executata. Revine ora curentă a sistemului. Să presupunem că data curentă este 28 octombrie 2009
  3. Apoi, se calculează rezultatul funcției de al doilea nivel LAST_DAY. LAST_DATE ('28 -OCT-2009 ') returnează ultima zi a lunii octombrie 2009, care este 31 octombrie 2009.
  4. Apoi, șapte zile sunt scăzute din această dată - se pare că 24 octombrie.
  5. În cele din urmă, funcția NEXT_DAY („24-OCT-2009”, „marți”) este evaluată, iar interogarea revine ultima marți din octombrie - care este 27-OCT-2009 în exemplul nostru.

Este destul de greu să înțelegi și să construiești expresii complexe folosind multe apeluri de funcții imbricate, dar acest lucru vine cu timpul și practica. Puteți împărți astfel de expresii în părți și le puteți testa separat. Tabelul DUAL este foarte util pentru testarea interogărilor și apelurilor de funcții. Puteți testa și depana componente mici, care pot fi apoi combinate într-o expresie mare, dorită.

Funcții de ramificare

Funcțiile de ramificare, cunoscute și sub numele de IF-THEN-ELSE, sunt utilizate pentru a determina calea de execuție pe baza unor circumstanțe. Funcțiile de ramificare returnează rezultate diferite pe baza rezultatului evaluării unei condiții. În grupul de astfel de funcții, se disting funcțiile pentru lucrul cu valori NULL: NVL, NVL2, NULLIF și COALESCE. Și, de asemenea, funcțiile comune reprezentate de funcția DECODĂ și expresia CASE. Funcția DECODARE este o funcție Oracle, în timp ce expresia CASE este prezentă în standardul ANSI SQL.

Funcția NVL

Funcția NVL testează valoarea unei coloane sau a unei expresii de orice tip de date pentru NULL. Dacă valoarea este NULL, returnează o valoare implicită alternativă non-NULL; în caz contrar, se returnează valoarea inițială.

Funcția NVL are doi parametri necesari, iar sintaxa este NVL (original, ifnull) unde original este valoarea originală care trebuie verificată și ifnull este rezultatul returnat de funcție dacă originalul este NULL. Tipul de date al parametrilor ifnull și original trebuie să fie compatibili. Adică, fie tipul de date trebuie să fie același, fie trebuie să fie posibil să se convertească implicit valorile de la un tip la altul. Funcția NVL returnează o valoare de același tip de date ca și tipul de date al parametrului original. Luați în considerare trei cereri

Interogarea 1: selectați nvl (1234) din dual;

Interogarea 2: selectați nvl (nul, 1234) din dual;

Interogarea 3: selectați nvl (substr („abc”, 4), „Nu există substring existent”) din dual;

Deoarece funcția NVL necesită doi parametri, interogarea 1 va returna o ORA-00909: eroare de număr nevalid de argumente. Interogarea 2 va returna 1234 deoarece NULL este bifat și este NULL. Interogarea trei folosește o funcție SUBSTR imbricată care încearcă să extragă al patrulea caracter dintr-un șir de trei caractere, returnează NULL, iar funcția NVL returnează șirul „Nu există nicio eroare”.

Funcția NVL este foarte utilă atunci când lucrați cu numere. Este folosit pentru a converti valorile NULL la 0 astfel încât operatii aritmetice peste numere nu a returnat NULL

Funcția NVL2

NVL2 oferă mai multe funcționalități decât NVL, dar gestionează și valorile NULL. Testează valoarea unei coloane sau a unei expresii de orice tip pentru NULL. Dacă valoarea nu este NULL, atunci se returnează al doilea parametru, altfel se returnează al treilea parametru, spre deosebire de funcția NVL, care în acest caz returnează valoarea inițială.

Funcția NVL2 are trei parametri necesari și sintaxa NVL2 (original, ifnotnull, ifnull), unde original este valoarea care trebuie verificată, ifnotnull este valoarea returnată dacă originalul nu este NULL și ifnull este valoarea returnată dacă originalul este NULL. Tipurile de date ale parametrilor ifnotnull și ifnull trebuie să fie compatibile și nu pot fi de tip LONG. Tipul de date returnat de funcția NVL2 este egal cu tipul de date al parametrului ifnotnull. Să ne uităm la câteva exemple

Interogarea 1: selectați nvl2 (1234, 1, „un șir”) din dual;

Interogarea 2: selectați nvl2 (nul, 1234, 5678) din dual;

Interogarea 3: selectați nvl2 (substr („abc”, 2), „Not bc”, „No substring”) din dual;

Parametrul ifnotnull din interogarea 1 este un număr, iar parametrul ifnull este un șir. Deoarece tipurile de date sunt incompatibile, este returnată eroarea „ORA-01722: număr nevalid”. Cererea doi returnează parametrul ifnull, deoarece originalul este NULL și rezultatul este 5678. Cererea trei utilizează funcția SUBSTR care returnează „bc” și apelează NVL2 („bc”, „Not bc”, „No substring”) - care returnează parametru ifnotnull - „Nu bc”.

Funcția NULLIF

Funcția NULLIF testează două valori pentru identitate. Dacă sunt aceleași, NULL este returnat, altfel se returnează primul parametru. Funcția NULLIF are doi parametri necesari și sintaxa NULLIF (ifunequal, comparison_item). Funcția compară doi parametri și dacă sunt identici - se returnează NULL, altfel parametrul ifunequal. Luați în considerare cererile

Interogarea 1: selectați nul (1234, 1234) din dual;

Interogarea unu returnează NULL deoarece parametrii sunt identici. Șirurile din interogarea 2 nu sunt convertite în dată, ci sunt comparate ca șiruri. Deoarece șirurile sunt de lungimi diferite, dacă este returnat 24 iunie-2009.

În Figura 10-4, funcția NULLIF este imbricată în funcția NVL2. Funcția NULLIF folosește la rândul său funcțiile SUBSTR și UPPER ca parte a expresiei din parametrul ifunequal. Coloana EMAIL este comparată cu această expresie, care returnează prima literă a prenumelui concatenat cu numele de familie pentru angajații al căror prenume are 4 caractere. Când aceste valori sunt egale, NULLIF va returna NULL, iar valoarea va returna valoarea parametrului ifunequal. Aceste valori sunt utilizate ca parametru pentru funcția NVL2. NVL2, la rândul său, returnează o descriere dacă articolele comparate s-au potrivit sau nu.

Figura 10-4 - Utilizarea funcției NULLIF

Funcția COALESCE

Funcția COALESCE returnează prima valoare non-NULL din lista de parametri. Dacă toți parametrii sunt NULL, atunci NULL este returnat. Funcția COALESCE are doi parametri necesari și câți parametri opționali doriți și sintaxa COALESCE (expr1, expr2, ..., exprn) unde rezultatul este expr1 dacă valoarea expr 1 nu este NULL, altfel rezultatul este expr2 dacă nu este NULL și așa mai departe. COALESCE este egal cu funcțiile NVL imbricate

COALESCE (expr1, expr2) = NVL (expr1, expr2)

COALESCE (expr1, expr2, expr3) = NVL (expr1, NVL (expr2, expr3))

Tipul de date al valorii returnate dacă se găsește o valoare non-NULL este egal cu tipul de date al primei valori non-NULL. Pentru a evita eroarea „ORA-00932: tipuri de date inconsistente”, toți parametrii non-NULL trebuie să fie compatibili cu primul parametru non-NULL. Să ne uităm la trei exemple

Interogarea 1: selectați coalesce (nul, nul, nul, „un șir”) din dual;

Interogarea 2: selectați coalesce (nul, nul, nul) din dual;

Interogarea 3: selectați coalesce (substr („abc”, 4), „Not bc”, „No substring”) din dual;

Interogarea 1 returnează al patrulea parametru: un șir, deoarece acesta este primul parametru non-NULL. Interogarea doi returnează NULL deoarece toți parametrii sunt NULL. Interogarea 3 evaluează primul parametru, obține o valoare NULL și returnează al doilea parametru, deoarece este primul parametru non-NULL.

Parametrii funcției NVL2 pot fi confuzi dacă sunteți deja familiarizați cu funcția NVL. NVL (original, ifnull) returnează originalul dacă valoarea nu este NULL, altfel ifnull. NVL2 (original, ifnotnull, ifnull) returnează ifnotnull dacă originalul nu este NULL altfel ifnull. Confuzia se datorează faptului că al doilea parametru al funcției NVL este ifnull, în timp ce în NVL2 este ifnotnull. Deci, nu vă bazați pe poziția parametrului în funcție.

Funcția DECODARE

Funcția DECODE implementează logica if-then-else verificând primii doi parametri pentru egalitate și returnând a treia valoare dacă sunt egali sau o altă valoare dacă nu sunt egali. Funcția DECODE are trei parametri necesari și sintaxa DECODE (expr1, comp1, iftrue1 ,,). Acești parametri sunt utilizați așa cum se arată în următorul exemplu de pseudocod

IF expr1 = comp1 apoi returnează iftrue1

Altfel dacă expr1 = comp2, apoi returnează iftrue2

Altfel dacă exprN = compN, apoi returnează iftrueN

Altfel return NULL | ifalse;

În primul rând, expr1 este comparat cu comp1. Dacă sunt egale, se returnează iftrue1. Dacă expr1 nu este egal cu comp1, ceea ce se întâmplă în continuare depinde dacă parametrii comp2 și iftrue2 sunt specificați. Dacă este dată, valoarea expr1 este comparată cu comp2. Dacă valorile sunt egale, atunci se returnează iftrue2. Dacă nu, atunci dacă există perechi de parametri compN, iftrueN, expr1 și compN sunt comparate și iftrueN este returnat dacă este egal. Dacă nu s-a găsit nicio potrivire în niciunul dintre seturile de parametri, atunci fie este diferit, dacă acest parametru a fost specificat, fie NULL.

Toți parametrii din funcția DECODARE pot fi expresii. Tipul returnat este egal cu tipul primului element de validare - parametrul comp 1. Expresie expr 1 este implicit convertibilă la tipul de date al parametrului comp1. Toate celelalte opțiuni disponibile pentru comp 1 ... compN de asemenea implicit convertibil în comp 1. DECODE tratează o valoare NULL ca fiind egală cu o altă valoare NULL, adică dacă expr1 este NULL și comp3 este NULL și comp2 nu este NULL, atunci iftrue3 este returnat. Să ne uităm la câteva exemple

Interogarea 1: selectați decodarea (1234, 123, „123 este o potrivire”) din dual;

Interogarea 2: selectați decodarea (1234, 123, „123 este o potrivire”, „Fără potrivire”) din dual;

Interogarea 3: selectați decodarea ('căutare', 'comp1', 'adevărat1', 'comp2', 'adevărat2', 'căutare', 'adevărat3', substr ('2 căutare', 2, 6), 'adevărat4', ' fals ') din dual;

Interogarea 1 compară valoarea 1234 și 123. Deoarece nu sunt egale, iftrue1 este ignorat și, deoarece nu este definită nicio valoare diferită, se returnează NULL. Solicitarea doi este identică cu solicitarea 1, cu excepția cazului în care este specificat și diferit. Întrucât 1234 nu este egal cu 123 atunci iffalse - „No match” este returnat. Solicitați trei verificări ale parametrilor pentru a vedea dacă se potrivesc cu valoarea de căutare. Parametrii comp1 și comp2 nu sunt egali „căutare”, astfel încât rezultatele iftrue1 și iftrue2 sunt omise. Potrivirea se găsește în a treia comparație a comp3 (poziția parametrului 6), iar valoarea returnată iftrue3 (parametrul 7) este „true3”. De când a fost găsită o potrivire, nu se efectuează alte calcule. Adică, în ciuda faptului că valoarea comp4 (parametrul 8) se potrivește și cu expr1, această expresie nu este niciodată calculată, deoarece s-a găsit o potrivire în comparația anterioară.

Expresie CASE

Toate limbajele de programare a treia și a patra generație implementează construcția de carcasă. La fel ca funcția DECODARE, expresia CASE vă permite să implementați logica if-then-else. Există două opțiuni pentru utilizarea expresiei CASE. O expresie simplă CASE stabilește sursa care trebuie comparată o singură dată și apoi listează toate condițiile de testare necesare. CASE-ul căutat evaluează ambele afirmații pentru fiecare condiție.

Expresia CASE are trei parametri necesari. Sintaxa expresiei este dependentă de tip. Pentru o expresie simplă CASE, arată așa

CASE search_expr

WHEN comparison_expr1 THEN iftrue1

}