Oracle nvl leírás. NVL transzformációk különféle adattípusokhoz

23.01.2022 Programok

NVL funkció

Általában az NVL funkció a leggyakrabban használt. A függvény két paramétert kap: NVL(expr1, expr2). Ha az első expr1 paraméter nem NULL, akkor a függvény visszaadja az értékét. Ha az első paraméter NULL, akkor a függvény az expr2 második paraméter értékét adja vissza.

Nézzünk egy gyakorlati példát. Az EMP tábla COMM mezője NULL értékeket tartalmazhat. Amikor egy lekérdezést hajt végre, például:

KIVÁLASZTÁS EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM

A SCOTT.EMP-től

a NULL értéket nullára cseréljük. Vegye figyelembe, hogy ha egy értéket egy függvény segítségével állítunk elő, akkor a rendszer egy álnevet rendel hozzá. A lekérdezés eredménye így fog kinézni:

EMPNO ENAME COMM NVL_COMM
7369 KOVÁCS 0
7499 ALLEN 300 300
7521 WARD 500 500
7566 JONES 0
7654 MÁRTON 1400 1400
7698 BLAKE 0
7782 CLARK 0
7839 KIRÁLY 0
7844 ESZTERGÁLYOS 0 0
7900 JAMES 0
7902 FORD 0
7934 MOLNÁR 0

CEIL(n) függvény

A CEIL függvény a paraméterként átadott n számnál nagyobb vagy azzal egyenlő legkisebb egész számot adja vissza. Például:

KIVÁLASZTÁSA CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4

DUAL-BÓL

TRUNC(n[,m])

A TRUNC függvény az n számot m tizedesjegyre csonkolva adja vissza. Az m paraméter elhagyható, ebben az esetben n egész számra csonkolódik.

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

TRUNC(100.25678; 2) X4

DUAL-BÓL

SIGN(n) függvény

A SIGN függvény egy szám előjelét határozza meg. Ha n pozitív, akkor a függvény 1-et ad vissza. Ha negatív, akkor -1-et. Ha ez nulla, akkor 0-t ad vissza. Például:

JEL KIVÁLASZTÁSA(100.22) X1, JEL(-100.22) X2, JEL(0) X3

DUAL-BÓL

Ennek a függvénynek egy érdekes tulajdonsága, hogy m értéket nullával ad át 0-val való osztás nélkül.

POWER(n, m) függvény

A POWER függvény az n számot m hatványra emeli. A fokozat lehet tört és negatív, ami jelentősen kibővíti ennek a függvénynek a képességeit.

TELJESÍTMÉNY KIVÁLASZTÁSA (10, 2) X1, TELJESÍTMÉNY (100, 1/2) X2,

TELJESÍTMÉNY(1000, 1/3) X3, TELJESÍTMÉNY(1000, -1/3) X4

DUAL-BÓL

X1 X2 X3 X4
100 10 10 0,1

Egyes esetekben kivétel előfordulhat a függvény meghívásakor. Például:

TELJESÍTMÉNY VÁLASZTÁSA(-100, 1/2) X2

DUAL-BÓL

Ebben az esetben a rendszer megpróbálja kiszámítani egy negatív szám négyzetgyökét, ami ORA-01428 "Argument out of range" hibát eredményez.

SQRT(n) függvény

Ez a függvény n négyzetgyökét adja vissza. Például:

SELECT SQRT(100) X

DUAL-BÓL

EXP(n) és LN(n) függvények

Az EXP függvény e-t n hatványára emel, az LN függvény pedig kiszámítja n természetes logaritmusát (amikor n-nek nagyobbnak kell lennie nullánál). Példa:

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

NVL funkció

Általában az NVL funkció a leggyakrabban használt. A függvény két paramétert kap: NVL(expr1, expr2). Ha az első expr1 paraméter nem NULL, akkor a függvény visszaadja az értékét. Ha az első paraméter NULL, akkor a függvény az expr2 második paraméter értékét adja vissza.

Nézzünk egy gyakorlati példát. Az EMP tábla COMM mezője NULL értékeket tartalmazhat. Amikor egy lekérdezést hajt végre, például:

KIVÁLASZTÁS EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM

A SCOTT.EMP-től

a NULL értéket nullára cseréljük. Vegye figyelembe, hogy ha egy értéket egy függvény segítségével állítunk elő, akkor a rendszer egy álnevet rendel hozzá. A lekérdezés eredménye így fog kinézni:

EMPNO ENAME COMM NVL_COMM
7369 KOVÁCS 0
7499 ALLEN 300 300
7521 WARD 500 500
7566 JONES 0
7654 MÁRTON 1400 1400
7698 BLAKE 0
7782 CLARK 0
7839 KIRÁLY 0
7844 ESZTERGÁLYOS 0 0
7900 JAMES 0
7902 FORD 0
7934 MOLNÁR 0

CEIL(n) függvény

A CEIL függvény a paraméterként átadott n számnál nagyobb vagy azzal egyenlő legkisebb egész számot adja vissza. Például:

KIVÁLASZTÁSA CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4

DUAL-BÓL

TRUNC(n[,m])

A TRUNC függvény az n számot m tizedesjegyre csonkolva adja vissza. Az m paraméter elhagyható, ebben az esetben n egész számra csonkolódik.

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

TRUNC(100.25678; 2) X4

DUAL-BÓL

SIGN(n) függvény

A SIGN függvény egy szám előjelét határozza meg. Ha n pozitív, akkor a függvény 1-et ad vissza. Ha negatív, akkor -1-et. Ha ez nulla, akkor 0-t ad vissza. Például:

JEL KIVÁLASZTÁSA(100.22) X1, JEL(-100.22) X2, JEL(0) X3

DUAL-BÓL

Ennek a függvénynek egy érdekes tulajdonsága, hogy m értéket nullával ad át 0-val való osztás nélkül.

POWER(n, m) függvény

A POWER függvény az n számot m hatványra emeli. A fokozat lehet tört és negatív, ami jelentősen kibővíti ennek a függvénynek a képességeit.

TELJESÍTMÉNY KIVÁLASZTÁSA (10, 2) X1, TELJESÍTMÉNY (100, 1/2) X2,

TELJESÍTMÉNY(1000, 1/3) X3, TELJESÍTMÉNY(1000, -1/3) X4

DUAL-BÓL

X1 X2 X3 X4
100 10 10 0,1

Egyes esetekben kivétel előfordulhat a függvény meghívásakor. Például:

TELJESÍTMÉNY VÁLASZTÁSA(-100, 1/2) X2

DUAL-BÓL

Ebben az esetben a rendszer megpróbálja kiszámítani egy negatív szám négyzetgyökét, ami ORA-01428 "Argument out of range" hibát eredményez.

SQRT(n) függvény

Ez a függvény n négyzetgyökét adja vissza. Például:

SELECT SQRT(100) X

DUAL-BÓL

EXP(n) és LN(n) függvények

Az EXP függvény e-t n hatványára emel, az LN függvény pedig kiszámítja n természetes logaritmusát (amikor n-nek nagyobbnak kell lennie nullánál). Példa:

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

TO_CHAR függvény számokkal

Az adatok más adattípusokká konvertálására szolgáló funkciók. A TO_CHAR(szám) egy számot szöveggé alakít. A TO_NUMBER(karakterlánc) a szöveget számmá alakítja.

A SELECT TO_CHAR (123) FROM DUAL a 123-as karakterláncot adja vissza, a SELECT TO_NUMBER (`12345") FROM DUAL az 12345 számot adja vissza.

Laboratóriumi munka. A kimeneti számok formátumának megváltoztatása

Numerikus formátum változásai az Oracle SQL-ben, TO_CHAR függvény a numerikus értékekkel való munkavégzéshez.

Gyakorlat:

Írjon egy lekérdezést, amely az 1. ábrán látható formátumban jeleníti meg a hr.employees táblázatból az alkalmazottak keresztnevére, vezetéknevére és fizetésére vonatkozó információkat. 3,4-1:

Rizs. 3.4 -1

Ugyanakkor az adatokat úgy kell rendezni, hogy először a legmagasabb fizetésű munkavállalók sorai jelenjenek meg.

Jegyzet:

Néhány fizetési érték az ábrán. A 3.4-1 módosult, így előfordulhat, hogy nem egyeznek az Ön értékeivel.

Megoldás:

SELECT first_name AS "First Name", last_name Mint "Last Name", TO_CHAR(SALARY, "L999999999.99") Mint "Bérezés" FROM hr.alkalmazottaktól ORDER BY SALRY DESC.

TO_NUMBER és TO_DATE függvények

A karakterlánc dátummá konvertáló függvénye TO_DATE(karakterlánc, formátum). A lehetséges formátumértékekről fentebb már volt szó, ezért adok néhány példát ennek a funkciónak a használatára. Példák:

KIVÁLASZTÁS TO_DATE("01/01/2010", `DD.HH.ÉÉÉÉ") TÓL TŐL A DUAL a '2010.01.01.' dátumot adja vissza;

KIVÁLASZTÁS TO_DATE("01.JAN.2010",`DD.MON.YYYY") TÓL TŐL A DUAL a '2009.01.01.' dátumot adja vissza;

KIVÁLASZTÁS TO_DATE("15-01-10",`NN-HH-ÉÉ") TÓL TŐL A DUAL a „2010.01.15.” dátumot adja vissza.

Egy karakterláncot TO_NUMBER számértékké alakító függvény (karakterlánc, formátum). A leggyakoribb formátumértékek a táblázatban vannak felsorolva, ezért nézzük meg ennek a függvénynek a használatát példákon keresztül. Példák:

KIVÁLASZTÁS TO_NUMBER(`100") TÓL TŐL A DUAL a 100-as számot adja vissza SELECT TO_NUMBER(`0010.01", "9999D99") TÓL TŐL A DUAL a 10.01 számot adja vissza;

KIVÁLASZTÁS TO_NUMBER("500 000", "999G999") TÓL TŐL A DUAL az 500000 számot adja vissza.

RR elem dátum formátumban

Az RR dátum és idő formátum elem hasonló az YY dátum és idő formátum eleméhez, de további rugalmasságot biztosít a dátumértékek tárolására más évszázadokban. Az RR datetime formátum elem lehetővé teszi a 20. századi dátumok tárolását a 21. században az évszám utolsó két számjegyének megadásával.

Ha az aktuális év utolsó két számjegye 00 és 49 között van, akkor a visszaadott év első két számjegye megegyezik az aktuális évével.

Ha a tárgyév utolsó két számjegye 50 és 99 között van, akkor a visszaadott év első 2 számjegye 1-gyel nagyobb, mint a tárgyév első 2 számjegye.

Ha az aktuális év utolsó két számjegye 00 és 49 között van, akkor a visszaadott év első 2 számjegye 1-gyel kisebb, mint az aktuális év első 2 számjegye.

Ha az aktuális év utolsó két számjegye 50 és 99 között van, akkor a visszaadott év első két számjegye megegyezik az aktuális év első két számjegyével.

NVL funkció

Általában az NVL funkció a leggyakrabban használt. A függvény két paramétert kap: NVL(expr1, expr2). Ha az első expr1 paraméter nem NULL, akkor a függvény visszaadja az értékét. Ha az első paraméter NULL, akkor a függvény a második paraméter exp2 értékét adja vissza.

Példa: Válassza ki az NVL-t (szállító városa, n/a") a szállítók közül:

A fenti SQL utasításban az n/" értéket adja vissza, ha a beszállító_város mező null értéket tartalmaz. Ellenkező esetben a szállító_város értéket adja vissza.

Egy másik példa az NVL függvény használatára Oracle/PLSQL-ben:

válassza ki a beszállítói_azonosítót, az NVL-t (szállító_leírása, szállító_neve) a szállítók közül.

Ez az SQL utasítás vissza fog térni Szállító neve mező, ha beszállító_leírás null értéket tartalmaz. Ellenkező esetben vissza fog térni beszállító_leírás.

Utolsó példa: az NVL függvény használata Oracle/PLSQL-ben: válassza az NVL(jutalék, 0) értéket az értékesítésből;

Ez az SQL utasítás a 0 if értéket adta vissza jutalék a mező null értéket tartalmaz. Különben visszatérne jutalékok terület.

NVL transzformációk különféle adattípusokhoz

Egy meghatározatlan érték tényleges értékké alakításához használja az NVL függvényt: NVL ( kifejezés1, kifejezés2), ahol:

kifejezés1- Az eredeti vagy számított érték, amely lehet nulla.

kifejezés2- A null értéket helyettesítő érték.

Jegyzet: Az NVL függvény bármilyen adattípus konvertálására használható, de az eredmény mindig azonos típusú lesz kifejezés1.

NVL konverzió különböző típusokhoz:

SZÁM-NVL (numerikus oszlop, 9).

CHAR vagy VARCHAR2 - NVL (karakterek|oszlop,"Nem érhető el").

Laboratóriumi munka. Az NVL függvény alkalmazása

NVL funkció az Oracle SQL nullértékeinek kezelésére.

Gyakorlat:

Írjon lekérdezést, amely információkat jelenít meg az alkalmazottak vezeték- és keresztnevéről a hr.employees. táblából, valamint az alkalmazott jutalék mértékéről (COMMISSION_PCT oszlop). Ebben az esetben azoknál az alkalmazottaknál, akiknél a jutalék nincs meghatározva, a 0 értéket kell megjeleníteni. A lekérdezés eredményének meg kell egyeznie az ábrán láthatóval. 3,5-1.

Rizs. 3.5 -1 (az értékek az 51. sortól kezdődően jelennek meg)

Megoldás:

A megfelelő kéréskód így nézhet ki:

SELECT first_name AS "First Name", last_name Mint "Last Name", NVL (COMMISSION_PCT, 0) Mint "Jutalék mértéke" FROM hr.employees.

Kicsit korábban érintettük a beágyazott függvényeket, most nézzük meg őket kicsit részletesebben. Megvizsgáljuk azokat a függvényeket is, amelyek a NULL értékkel dolgoznak, valamint azokat a függvényeket, amelyek segítik az elágazási művelet végrehajtását egy lekérdezésben.

beágyazott függvények

A beágyazott függvények az egyik függvény visszatérési értékét egy másik függvény bemeneti paramétereként használják. A függvények mindig csak egy értéket adnak vissza. Ezért a függvényhívás eredményét literális értékként kezelheti, ha egy másik függvényhívás paramétereként használja. A sorfüggvények a beágyazás bármely szintjéig beágyazhatók. Egyetlen függvényhívás így néz ki

Funkció1(paraméter1, paraméter2, …) = eredmény

Egy függvényparaméter lecserélése egy másik függvény hívására olyan kifejezéseket eredményezhet, mint pl

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

A beágyazott függvények először kiértékelésre kerülnek, mielőtt eredményeiket más függvények bemeneti értékeként használnák fel. A funkciók kiértékelése a legmélyebb beágyazási szinttől a legfelsőig balról jobbra történik. Az előző kifejezés végrehajtása a következőképpen történik

  1. A rendszer kiértékeli az F3(param1) függvényt, és a visszatérési értéket használja a 2. függvény harmadik paramétereként, nevezzük param2.3-nak.
  2. Ezután a rendszer kiértékeli az F2(param1, param2.2, param2.3) függvényt, és a visszaadott értéket használja az F1 - param1.2 függvény második paramétereként.
  3. Végül kiértékeli az F1(param1, param2, param1.3) függvényt, és az eredményt visszaküldi a hívó programnak.

Így az F3 függvény a harmadik beágyazási szinten van.

Fontolja meg a lekérdezést

válasszuk a következő_nap(utolsó_nap(sysdate)-7, 'tue') a dualból;

  1. Ebben a lekérdezésben három függvény található, alulról felfelé: SYSDATE, LAST_DAY, NEXT_DAY. A kérés így hangzik el
  2. A beágyazott SYSDATE függvény végrehajtásra kerül. Visszaadja az aktuális rendszeridőt. Tegyük fel, hogy az aktuális dátum 2009. október 28
  3. Ezután a LAST_DAY második szintű függvény eredményét számítjuk ki. A LAST_DATE('28-OCT-2009') 2009. október utolsó napját adja vissza, azaz 2009. október 31-ét.
  4. Ezután hét napot levonunk ebből a dátumból - október 24-ét kapjuk.
  5. Végül a NEXT_DAY('24-OCT-2009', 'tue') függvény kiértékelésre kerül, és a lekérdezés október utolsó keddjét adja vissza – ami példánkban 2009. október 27..

Elég nehéz bonyolult kifejezéseket megérteni és felépíteni sok beágyazott függvényhívással, de ez idővel és gyakorlattal jön. Az ilyen kifejezéseket részekre bonthatja, és külön tesztelheti. A DUAL tábla nagyon hasznos a lekérdezések és a függvényhívások eredményeinek teszteléséhez. Tesztelheti és hibakeresheti a kis komponenseket, amelyeket aztán egyetlen nagy kívánt kifejezéssé egyesít.

Elágazási funkciók

Az elágazó függvények, más néven IF-THEN-ELSE, bizonyos körülményektől függően a végrehajtási útvonal meghatározására szolgálnak. Az ágfüggvények a feltétel kiértékelésének eredménye alapján különböző eredményeket adnak vissza. Az ilyen függvények csoportjában a NULL értékkel dolgozó függvények találhatók: NVL, NVL2, NULLIF és COALESCE. És a DECODE függvény és a CASE kifejezés által képviselt általános függvények is. A DECODE függvény egy Oracle függvény, míg a CASE kifejezés az ANSI SQL szabványban található.

NVL funkció

Az NVL függvény bármely adattípus oszlopának vagy kifejezésének nullértékét ellenőrzi. Ha az érték NULL, akkor egy alternatív, nem NULL alapértelmezett értéket ad vissza, ellenkező esetben az eredeti értéket adja vissza.

Az NVL függvénynek két kötelező paramétere van, és a szintaxis NVL(eredeti, ifnull), ahol az eredeti az eredeti ellenőrizendő érték, az ifnull pedig a függvény által visszaadott eredmény, ha az eredeti NULL. Az ifnull és az eredeti paraméterek adattípusának kompatibilisnek kell lennie. Vagyis vagy az adattípusnak meg kell egyeznie, vagy lehetővé kell tenni az értékek implicit konvertálását egyik típusból a másikba. Az NVL függvény az eredeti paraméter adattípusával megegyező adattípusú értéket ad vissza. Tekintsünk három lekérdezést

1. lekérdezés: válassza ki az nvl(1234)-t a dual közül;

2. lekérdezés: válasszon nvl(null, 1234) a dual közül;

3. lekérdezés: válassza ki az nvl(substr('abc', 4), 'Nincs részkarakterlánc') lehetőséget a dual közül;

Mivel az NVL függvény két paramétert igényel, az 1. lekérdezés ORA-00909: érvénytelen argumentumok száma hibát ad vissza. A 2. lekérdezés 1234-et ad vissza, mert a NULL ellenőrzés alatt áll, és ez NULL. A harmadik lekérdezés egy beágyazott SUBSTR függvényt használ, amely megkísérli kivonni a negyedik karaktert egy háromkarakteres karakterláncból, NULL értéket ad vissza, az NVL függvény pedig a „No sbusstring” karakterláncot adja vissza.

Az NVL funkció nagyon hasznos számokkal való munka során. A NULL értékek 0-ra való konvertálására szolgál, hogy a számokkal végzett aritmetikai műveletek ne adják vissza a NULL értéket.

NVL funkció2

Az NVL2 funkció több funkcionalitást biztosít, mint az NVL, de kezeli a NULL-t is. Ellenőrzi, hogy egy oszlop vagy bármilyen típusú kifejezés értéke nulla-e. Ha az érték nem NULL, akkor a második paramétert adjuk vissza, ellenkező esetben a harmadik paramétert, ellentétben az NVL függvénnyel, amely ebben az esetben az eredeti értéket adja vissza.

Az NVL2 függvénynek három kötelező paramétere van, és a szintaxis NVL2 (original, ifnotnull, ifnull), ahol az eredeti a tesztelendő érték, az ifnotnull a visszaadandó érték, ha az eredeti nem NULL, és az ifnull a visszaadandó érték, ha az eredeti. NULLA. Az ifnotnull és ifnull paraméterek adattípusainak kompatibilisnek kell lenniük, és nem lehetnek LONG típusúak. Az NVL2 függvény által visszaadott adattípus megegyezik az ifnotnull paraméter adattípusával. Nézzünk néhány példát

1. lekérdezés: válassza ki az nvl2(1234, 1, 'egy karakterlánc') értéket a dual közül;

2. lekérdezés: válassza ki az nvl2(null, 1234, 5678) értéket a dual közül;

3. lekérdezés: válassza ki az nvl2(substr('abc', 2), 'Not bc', 'No substring') lehetőséget a dual közül;

Az ifnotnull paraméter az 1. lekérdezésben egy szám, az ifnull paraméter pedig egy karakterlánc. Mivel az adattípusok nem kompatibilisek, az „ORA-01722: érvénytelen szám” hibaüzenet jelenik meg. A második lekérdezés egy ifnull paramétert ad vissza, mivel az eredeti NULL, az eredmény pedig 5678. A harmadik lekérdezés a SUBSTR függvényt használja, amely „bc”-t ad vissza, és meghívja az NVL2-t ('bc', „Not bc”, „Nincs részkarakterlánc”) – amely egy ifnotnull értéket ad vissza. paraméter – 'Nem bc'.

NULLIF függvény

A NULLIF függvény két értéket tesztel ugyanarra. Ha megegyeznek, akkor NULL-t ad vissza, ellenkező esetben az első paramétert. A NULLIF függvénynek két kötelező paramétere van, a szintaxis pedig NULLIF(ifunequal, összehasonlítási_elem). A függvény összehasonlít két paramétert, és ha azok azonosak, akkor NULL-t ad vissza, ellenkező esetben az ifunequal paramétert. Vegye figyelembe a kéréseket

1. lekérdezés: a dual közül válassza ki a nullif(1234, 1234) értéket;

Az első lekérdezés NULL-t ad vissza, mert a paraméterek azonosak. A 2. lekérdezésben szereplő karakterláncok nem konvertálódnak dátummá, hanem karakterláncokként hasonlítják össze. Mivel a karakterláncok különböző hosszúságúak, az ifunequal 24-JUL-2009 paraméter kerül visszaadásra.

A 10-4. ábrán a NULLIF függvény az NVL2 függvénybe van beágyazva. A NULLIF függvény viszont a SUBSTR és UPPER függvényeket használja az ifunequal paraméterben lévő kifejezés részeként. Az EMAIL oszlopot összehasonlítja ezzel a kifejezéssel, amely a 4 karakter hosszú keresztnevű alkalmazottak keresztnevének első betűjét adja vissza a vezetéknévvel összefűzve. Ha ezek az értékek egyenlőek, a NULLIF NULL értéket ad vissza, ellenkező esetben az ifunequal paraméter értékét adja vissza. Ezeket az értékeket az NVL2 funkció paramétereiként használják. Az NVL2 viszont egy leírást ad vissza arról, hogy az összehasonlított elemek egyeztek-e vagy sem.

10-4. ábra - A NULLIF függvény használata

COALESCE funkció

A COALESCE függvény az első nem NULL értéket adja vissza a paraméterlistából. Ha minden paraméter NULL, akkor NULL értéket ad vissza. A COALESCE függvénynek két kötelező paramétere és tetszőleges számú választható paramétere van, a szintaxis pedig COALESCE(kifejezés1, kif2, ..., kifejezés), ahol az eredmény expr1, ha az 1. kifejezés értéke nem NULL, ellenkező esetben az eredmény: expr2 ha nem NULL, és így tovább. A COALESCE jelentése egyenlő a beágyazott NVL függvényekkel

EGYESÜLÉS(kifejezés1, kifejez2) = NVL(kifejezés1, kifejez2)

EGYESÜLÉS(kifejezés1,kif2,3) = NVL(kifejezés1,NVL(kifejezés2,3))

Ha nem NULL értéket talál, a visszaadott érték adattípusa megegyezik az első nem NULL érték adattípusával. Az „ORA-00932: inkonzisztens adattípusok” hiba elkerülése érdekében minden nem NULL paraméternek kompatibilisnek kell lennie az első nem NULL paraméterrel. Vegyünk három példát

1. lekérdezés: a dualból válassza ki a coalesce(null, null, null, 'egy karakterlánc') opciót;

2. lekérdezés: válasszuk ki az összevonás(null, null, null) a dual közül;

3. lekérdezés: dualból válassza ki a coalesce(substr('abc', 4), 'Not bc', 'No substring') lehetőséget;

Az 1. lekérdezés a negyedik paramétert adja vissza: egy karakterláncot, mivel ez az első nem NULL paraméter. A két lekérdezés NULL-t ad vissza, mert minden paraméter NULL. A 3. lekérdezés kiértékeli az első paramétert, NULL értéket kap, és a második paramétert adja vissza, mivel ez az első nem NULL paraméter.

Az NVL2 funkció paraméterei zavaróak lehetnek, ha már ismeri az NVL funkciót. Az NVL(eredeti, ifnull) eredetit ad vissza, ha az érték nem NULL, ellenkező esetben ifnull. Az NVL2(eredeti, ifnotnull, ifnull) az ifnotnull értéket adja vissza, ha az eredeti nem null egyébként ifnull. A zavar abból adódik, hogy az NVL függvény második paramétere az ifnull, míg az NVL2-ben az ifnotnull. Tehát ne hagyatkozzon a paraméter pozíciójára a függvényben.

DECO funkció

A DECODE függvény az if-then-else logikát úgy valósítja meg, hogy ellenőrzi az első két paraméter egyenlőségét, és visszaadja a harmadik értéket, ha egyenlők, vagy eltérő értéket, ha nem. A DECODE függvénynek három kötelező paramétere van, szintaxisa pedig DECODE(kifejezés1, comp1, iftrue1, , ). Ezeket a paramétereket a következő pszeudokód példában bemutatott módon használjuk.

IF expr1=comp1, akkor adja vissza az iftrue1-et

Ellenkező esetben ha expr1=comp2, akkor adja vissza az iftrue2-t

Else if exprN=compN akkor adja vissza iftrueN

Else return NULL|iffalse;

Először is, az expr1 összehasonlításra kerül a comp1-gyel. Ha egyenlők, akkor az iftrue1 értéket adja vissza. Ha az expr1 nem egyenlő a comp1-el, akkor a következő lépés attól függ, hogy a comp2 és iftrue2 paraméterek megadva vannak-e. Ha adott, akkor az expr1 értékét összehasonlítjuk a komp2 értékkel. Ha az értékek egyenlőek, akkor az iftrue2 értéket ad vissza. Ha nem, akkor ha vannak compN, iftrueN paraméterpárok, az expr1 és a compN összehasonlításra kerül, és ha igaz, akkor iftrueN értéket ad vissza, ha egyenlő. Ha a paraméterek egyik halmazában sem található egyezés, akkor vagy hafalse értéket ad vissza, ha ez a paraméter meg van adva, vagy NULL-t.

A DECODE függvény összes paramétere lehet kifejezés. A visszatérési érték típusa megegyezik az első validátor - a paraméter típusával comp 1. Kifejezés kif 1 implicit módon átalakítja a comp paraméter adattípusát1. Minden más kompozíciós lehetőség elérhető 1 … compN szintén implicit módon comp típusba konvertálódnak 1. A DECODE egy NULL értéket egyenlőnek tekint egy másik NULL értékkel, azaz. ha az expr1 értéke NULL, a comp3 pedig NULL, a comp2 pedig nem NULL, akkor az iftrue3 értéket adja vissza. Nézzünk néhány példát

1. lekérdezés: válassza ki a dekódolást (1234, 123, '123 egyezés') a dual közül;

2. lekérdezés: válassza ki a dekódolást (1234, 123, '123 egyezés', 'Nincs egyezés') a dualból;

3. lekérdezés: válassza ki a decode('keresés', 'komp1', 'igaz1', 'komp2', 'igaz2', 'keresés', 'igaz3', substr('2keresés', 2, 6), 'igaz4', ' hamis') kettősből;

Az első lekérdezés összehasonlítja az 1234-es és a 123-as értéket. Mivel ezek nem egyenlőek, az iftrue1 figyelmen kívül hagyja, és mivel az iffalse nincs megadva, NULL-t ad vissza. A második lekérdezés megegyezik az 1. lekérdezéssel, kivéve, hogy az iffalse érték van megadva. Mivel 1234 nem egyenlő 123-mal, iffalse - "Nincs egyezés" ad vissza. A harmadik lekérdezés ellenőrzi a paraméterértékeket a keresési értékhez képest. A comp1 és comp2 paraméterek nem egyenlőek a 'search'-val, így az iftrue1 és iftrue2 eredményei kimaradnak. Egyezés található a harmadik comp3 elem-összehasonlítási műveletben (6. paraméter pozíció), és az iftrue3 visszatérési értéke (7. paraméter) 'true3'. Mivel egyezés található, nem történik több számítás. Vagyis annak ellenére, hogy a comp4 értéke (8. paraméter) is egyezik az expr1-el, ez a kifejezés soha nem kerül kiértékelésre, mert az előző összehasonlításban megtalálták az egyezést.

CASE kifejezés

Minden harmadik és negyedik generációs programozási nyelv megvalósítja az esetkonstrukciót. A DECODE függvényhez hasonlóan a CASE kifejezés is lehetővé teszi az if-then-else logika megvalósítását. Két lehetőség van a CASE kifejezés használatára. Egy egyszerű CASE utasítás beállítja az összehasonlítandó forráselemet, majd felsorolja az összes szükséges tesztfeltételt. A komplex (keresett) CASE mindkét utasítást kiértékeli minden feltételhez.

A CASE kifejezésnek három kötelező paramétere van. A kifejezés szintaxisa a típustól függ. Egy egyszerű CASE kifejezéshez így néz ki

CASE keresési_kifejezés

WHEN összehasonlítás_kifejezés1 THEN iftrue1

}