Descriere Nvl sql. Conversii NVL pentru diferite tipuri de date. Lucrări de laborator. Folosind funcția NVL

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 într-un număr.

SELECT TO_CHAR (123) FROM DUAL va returna șirul 123, SELECT TO_NUMBER (`12345") FROM DUAL va returna numărul 12345.

Lucrări de laborator. Modificarea formatului numărului de ieșire

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

Exercițiu:

Scrieți o interogare care să afișeze informații despre numele, numele și salariul angajaților din tabelul hr.employees în formatul prezentat în Fig. 3.4-1:

Orez. 3.4 -1

În acest caz, datele trebuie sortate astfel încât rândurile pentru angajații cu cel mai mare salariu să fie afișate mai întâi.

Notă:

Unele valori salariale din Fig. 3.4-1 au fost modificate, astfel încât este posibil să nu fie aceleași cu valorile dvs.

Soluţie:

SELECTAȚI prenume AS „Nume”, prenume Ca „Nume”, TO_CHAR (SALARY, „L999999999.99”) Ca „Salariu” FROM hr.employees ORDER BY SALARY DESC.

Funcțiile TO_NUMBER și TO_DATE

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

SELECTAȚI TO_DATE("01/01/2010", `ZZ.LL.AAAA") DIN DUAL va returna data `01/01/2010";

SELECTAȚI TO_DATE(„01.JAN.2010”, `ZZ.LUN.AAAA”) DIN DUAL va returna data `01/01/2009";

SELECTAȚI TO_DATE ("15-01-10", `ZZ-LL-AA") DIN DUAL va returna data `15/01/2010".

Funcție de conversie a unui șir într-o valoare numerică TO_NUMBER (șir, format). Cele mai comune valori de format sunt enumerate în tabel, așa că să ne uităm la utilizarea acestei funcții folosind exemple. Exemple:

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

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

Element RR în format de dată

Elementul format RR datetime este similar cu elementul format datetime YY, dar oferă flexibilitate suplimentară pentru stocarea valorilor datei în alte secole. Elementul de format RR datetime permite stocarea datelor din secolul 20 în secolul 21 prin specificarea doar a ultimelor două cifre ale anului.

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

Dacă ultimele două cifre ale anului curent sunt de la 50 la 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 de la 50 la 99, atunci anul returnat are aceleași primele două cifre ca anul curent.

Funcția NVL

Funcția NVL este, în general, utilizată cel mai des. Funcția primește doi parametri: NVL (expr1, expr2). Dacă primul parametru expr1 nu este NULL, atunci funcția își returnează valoarea. Dacă primul parametru este NULL, atunci funcția returnează în schimb valoarea celui de-al doilea parametru expr2.

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

Declarația SQL de mai sus va returna n/" dacă câmpul supplier_city conține o valoare nulă. În caz contrar, va returna valoarea supplier_city.

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

selectați supplier_id, NVL (furnizor_desc, furnizor_name) 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.

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

Această instrucțiune SQL a returnat valoarea 0 dacă comision Câmpul conține o valoare nulă. Altfel ar fi returnat comisioane camp.

Conversii NVL pentru diferite tipuri de date

Pentru a converti o valoare nulă într-o valoare reală, utilizați funcția NVL: NVL ( expresie1, expresie2), Unde:

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

expresie2- Valoarea care este înlocuită cu valoarea nedefinită.

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

Conversie NVL pentru diferite tipuri:

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

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

Lucrări de laborator. Folosind funcția NVL

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

Exercițiu:

Scrieți o interogare care să afișeze informații despre numele și numele angajatului din tabelul hr.employees, precum și rata comisionului (coloana COMMISSION_PCT) pentru angajat. În acest caz, pentru acei angajați pentru care comisionul nu este definit, trebuie afișată valoarea 0. Rezultatul solicitării trebuie să fie cel prezentat în Fig. 3,5-1.

Orez. 3.5 -1 (valori afișate începând de la rândul 51)

Soluţie:

Codul de solicitare corespunzător ar putea fi astfel:

SELECT prenumele AS „Prenumele”, numele de familie ca „Numele de familie”, NVL (COMMISSION_PCT, 0) Ca „Rata de comision” FROM hr.employees.

Funcția NVL

Funcția NVL este, în general, folosită cel mai des. Funcția primește doi parametri: NVL(expr1, expr2). Dacă primul parametru expr1 nu este NULL, atunci funcția își returnează valoarea. Dacă primul parametru este NULL, atunci funcția returnează în schimb valoarea celui de-al doilea parametru expr2.

Să ne uităm la 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ă atunci când o valoare este generată folosind 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 transmis ca parametru. De exemplu:

SELECTARE 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 să nu fie specificat î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, atunci funcția returnează 1. Dacă n este negativ, returnează -1. Dacă este egal cu zero, atunci se returnează 0. De exemplu:

SELECTARE SEMNA (100,22) X1, SEMNA (-100,22) X2, SEMN (0) X3

DE LA DUAL

O caracteristică interesantă a acestei funcții este capacitatea de a transmite m egal cu zero fără a provoca o eroare de divizare cu 0.

Funcția POWER(n, m)

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

SELECTAȚI PUTEREA(10, 2) X1, PUTEREA(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, poate apărea o excepție la apelarea acestei funcție. De exemplu:

SELECTARE PUTEREA(-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 avea ca rezultat o eroare ORA-01428 „Argument în afara intervalului”.

Funcția SQRT(n)

Această funcție returnează rădăcina pătrată a numărului 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 n, iar funcția LN calculează logaritmul natural al lui n (n trebuie să fie mai mare decât zero). Exemplu:

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

Funcția NVL

Funcția NVL este, în general, folosită cel mai des. Funcția primește doi parametri: NVL(expr1, expr2). Dacă primul parametru expr1 nu este NULL, atunci funcția își returnează valoarea. Dacă primul parametru este NULL, atunci funcția returnează în schimb valoarea celui de-al doilea parametru expr2.

Să ne uităm la 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ă atunci când o valoare este generată folosind 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 transmis ca parametru. De exemplu:

SELECTARE 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 să nu fie specificat î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, atunci funcția returnează 1. Dacă n este negativ, returnează -1. Dacă este egal cu zero, atunci se returnează 0. De exemplu:

SELECTARE SEMNA (100,22) X1, SEMNA (-100,22) X2, SEMN (0) X3

DE LA DUAL

O caracteristică interesantă a acestei funcții este capacitatea de a transmite m egal cu zero fără a provoca o eroare de divizare cu 0.

Funcția POWER(n, m)

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

SELECTAȚI PUTEREA(10, 2) X1, PUTEREA(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, poate apărea o excepție la apelarea acestei funcție. De exemplu:

SELECTARE PUTEREA(-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 avea ca rezultat o eroare ORA-01428 „Argument în afara intervalului”.

Funcția SQRT(n)

Această funcție returnează rădăcina pătrată a numărului 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 n, iar funcția LN calculează logaritmul natural al lui n (n trebuie să fie mai mare decât zero). Exemplu:

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

Am atins puțin mai devreme funcțiile imbricate, acum le vom analiza mai detaliat. Vom lua în considerare și funcțiile pentru lucrul cu valoarea NULL și funcțiile 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 pentru 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 pentru un alt apel de funcție. Funcțiile șir pot fi imbricate la orice nivel de imbricare. Un apel de funcție arată așa

Funcția1(parametrul1, parametrul2, …) = rezultat

Înlocuirea unui parametru de funcție cu un apel către o altă funcție poate avea ca rezultat 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 valori de intrare pentru alte funcții. Funcțiile sunt evaluate de la cel mai adânc nivel de cuib până la cel mai sus, de la stânga la dreapta. Expresia anterioară se execută după cum urmează

  1. Funcția F3(param1) este evaluată și valoarea returnată este folosită ca al treilea parametru pentru funcția 2, să o numim param2.3
  2. Apoi funcția F2(param1, param2.2, param2.3) este evaluată și valoarea returnată este folosită ca al doilea parametru al funcției F1 - param1.2
  3. În final, funcția F1(param1, param2, param1.3) este evaluată și rezultatul este returnat programului apelant.

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

Să luăm în considerare cererea

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

  1. Există trei funcții în această interogare, de la nivelul inferior la nivelul superior - SYSDATE, LAST_DAY, NEXT_DAY. Solicitarea se execută după cum urmează
  2. Funcția SYSDATE imbricată este executată. Acesta returnează ora curentă a sistemului. Să presupunem că data curentă este 28 octombrie 2009
  3. În continuare, se calculează rezultatul funcției de nivel al doilea LAST_DAY. LAST_DATE('28-OCT-2009') returnează ultima zi a lunii octombrie 2009, adică 31 octombrie 2009.
  4. Apoi șapte zile sunt scăzute din această dată - se dovedește 24 octombrie.
  5. În cele din urmă, funcția NEXT_DAY('24-OCT-2009', 'tue') este evaluată, iar interogarea returnează ultima marți din octombrie - care în exemplul nostru este 27-OCT-2009.

Este destul de dificil să înțelegeți și să construiți expresii complexe folosind multe apeluri de funcții imbricate, dar acest lucru vine cu timp și practică. 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 a rezultatelor apelurilor de funcție. Puteți testa și depana componente mici, care sunt apoi combinate într-o expresie mare dorită.

Funcții de ramificare

Funcțiile de ramură, cunoscute și ca IF-THEN-ELSE, sunt folosite pentru a determina calea de execuție în funcție de anumite circumstanțe. Funcțiile de ramificare returnează rezultate diferite în funcție de rezultatul evaluării condiției. Grupul de astfel de funcții include funcții pentru lucrul cu valoarea NULL: NVL, NVL2, NULLIF și COALESCE. Și, de asemenea, funcțiile comune reprezentate de funcția DECODE și expresia CASE. Funcția DECODE este o funcție Oracle, în timp ce expresia CASE este prezentă în standardul ANSI SQL.

Funcția NVL

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

Funcția NVL are doi parametri necesari și sintaxa este NVL(original, ifnull) unde original este valoarea originală de verificat și ifnull este rezultatul returnat de funcție dacă valoarea inițială este NULL. Tipul de date al parametrilor ifnull și original trebuie să fie compatibil. Adică, fie tipul de date trebuie să fie același, fie trebuie să fie posibilă conversia implicită a valorilor de la un tip la altul. Funcția NVL returnează o valoare de același tip de date ca tipul de date al parametrului original. Să luăm în considerare trei interogări

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

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

Interogarea 3: selectați nvl(substr(‘abc’, 4), ‘Nu există subșir’) din dual;

Deoarece funcția NVL necesită doi parametri, cererea 1 va returna eroarea ORA-00909: număr invalid de argumente. Interogarea 2 va returna 1234 deoarece valoarea NULL este verificată și este NULL. Interogarea trei utilizează o funcție SUBSTR imbricată care încearcă să extragă al patrulea caracter dintr-un șir lung de trei caractere, returnând NULL, iar funcția NVL returnând șirul „Nu există sbustring”.

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 operațiile aritmetice pe numere să nu returneze NULL

Funcția NVL2

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

Funcția NVL2 are trei parametri necesari, iar sintaxa este NVL2(original, ifnotnull, ifnull), unde original este valoarea care este testată, ifnotnull este valoarea returnată dacă original nu este NULL și ifnull este valoarea returnată dacă original 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(null, 1234, 5678) din dual;

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

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

Funcția NULLIF

Funcția NULLIF verifică dacă două valori sunt identice. Dacă sunt aceleași, este returnat NULL, în caz contrar primul parametru este returnat. Funcția NULLIF are doi parametri necesari și sintaxa este NULLIF(ifunequal, comparison_item). Funcția compară doi parametri și dacă aceștia sunt identici, este returnat NULL, în caz contrar parametrul este inegal. Să luăm în considerare cererile

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

Interogarea unu returnează NULL deoarece parametrii sunt identici. Șirurile din Interogarea 2 nu sunt convertite într-o dată, ci comparate ca șiruri. Deoarece șirurile sunt de lungimi diferite, parametrul ifunequal este returnat 24-JUL-2009.

În Figura 10-4, funcția NULLIF este imbricată în funcția NVL2. La rândul său, funcția NULLIF utilizează funcțiile SUBSTR și UPPER ca parte a unei expresii în parametrul ifunequal. Coloana EMAIL este comparată cu această expresie, care returnează prima literă a prenumelui combinată cu numele de familie pentru angajații al căror prenume are 4 caractere. Când aceste valori sunt egale, NULLIF va returna NULL, altfel 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ă elementele 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 este returnat NULL. Funcția COALESCE are doi parametri necesari și orice număr de parametri opționali, iar sintaxa este COALESCE(expr1, expr2, ..., exprn) unde rezultatul va fi expr1 dacă valoarea expr 1 nu este NULL, în caz contrar rezultatul va fi expr2 dacă nu este NULL etc. COALESCE este egal ca semnificație 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ă este găsită 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 (null, null, null, „un șir”) din dual;

Interogarea 2: selectați coalesce(null, null, null) 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 este primul parametru non-NULL. Interogarea a doua returnează NULL deoarece toți parametrii sunt NULL. Interogarea 3 evaluează primul parametru, primește valoarea NULL și returnează al doilea parametru deoarece este primul parametru non-NULL.

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

Funcția DECODE

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

IF expr1=comp1, atunci returnează iftrue1

Altfel, dacă expr1=comp2, atunci returnează iftrue2

Altfel, dacă exprN=compN, atunci returnează iftrueN

Altfel returnează NULL|iffalse;

În primul rând, expr1 este comparată cu comp1. Dacă sunt egale, se returnează iftrue1. Dacă expr1 nu este egal cu comp1, atunci 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, se compară iftrueN, expr1 și compN și, dacă sunt egali, se returnează iftrueN. Dacă nu a fost găsită nicio potrivire în niciun set de parametri, atunci fie ifalse dacă acest parametru a fost specificat, fie este returnat NULL.

Toți parametrii din funcția DECODE pot fi expresii. Tipul valorii returnate este egal cu tipul primului element de validare - parametrul comp 1. Expresie expr 1 este convertit implicit în tipul de date al parametrului comp1. Toți ceilalți parametri comp disponibili 1...compN sunt, de asemenea, convertite implicit în tipul 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 se returnează iftrue3. Să ne uităm la câteva exemple

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

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

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

Interogarea unu compară valoarea 1234 și 123. Deoarece acestea nu sunt egale, iftrue1 este ignorată și deoarece valoarea ifalse nu este definită, este returnat NULL. Cererea doi este identică cu cererea 1, cu excepția faptului că valoarea ifalse este definită. Deoarece 1234 nu este egal cu 123, returnează ifals – „Fără potrivire”. Interogarea trei verifică valorile parametrilor pentru a se potrivi cu valoarea de căutare. Parametrii comp1 și comp2 nu sunt egali cu „căutare”, așa că rezultatele pentru iftrue1 și iftrue2 sunt omise. O potrivire este găsită în a treia operație de comparare a elementului comp3 (poziția parametrului 6) și este returnată valoarea lui iftrue3 (parametrul 7), care este egală cu „true3”. Din moment ce se găsește o potrivire, nu mai sunt efectuate calcule. Adică, în ciuda faptului că valoarea lui comp4 (parametrul 8) se potrivește și cu expr1, această expresie nu este niciodată calculată deoarece potrivirea a fost găsită în comparația anterioară.

expresie CASE

Toate limbajele de programare din a treia și a patra generație implementează constructul caz. La fel ca și funcția DECODE, expresia CASE vă permite să implementați logica if-then-else. Există două opțiuni pentru utilizarea expresiei CASE. O expresie CASE simplă setează elementul sursă pentru a compara o dată și apoi listează toate condițiile de testare necesare. CASE complex (căutat) evaluează ambele declarații pentru fiecare condiție.

Expresia CASE are trei parametri necesari. Sintaxa expresiei depinde de tip. Pentru o expresie CASE simplă arată astfel

CASE search_expr

CÂND comparison_expr1 ATUNCI dacă adevărat1

}