V Oracle, NANVL()
funkce nám umožňuje pracovat s NaN
hodnoty zadáním jiného čísla, které se má vrátit na jeho místo.
Funguje to tak, že přijímá dva argumenty. Pokud je první argument NaN
(ne číslo), vrátí druhý argument. Pokud první argument je číslo, pak toto číslo jednoduše vrátí.
Tato funkce je užitečná pouze pro čísla s plovoucí desetinnou čárkou typu BINARY_FLOAT
nebo BINARY_DOUBLE
.
Syntaxe
Syntaxe vypadá takto:
NANVL(n2, n1)
Každý argument může být jakýkoli číselný datový typ nebo jakýkoli nenumerický datový typ, který lze implicitně převést na číselný datový typ.
Příklad
Můžeme vyrobit NaN
vydělením nulové plovoucí/dvojité hodnoty nulou:
SELECT 0f/0
FROM DUAL;
Výsledek:
0F/0 _______ NaN
Ale pokud nechceme NaN
k vrácení můžeme použít NANVL()
funkce vrátit jinou hodnotu:
SELECT NANVL(0f/0, 0)
FROM DUAL;
Výsledek:
NANVL(0F/0,0) ________________ 0,0
Tady je to znovu, ale tentokrát určíme jinou hodnotu, která se vrátí místo NaN
:
SELECT NANVL(0f/0, 123)
FROM DUAL;
Výsledek:
NANVL(0F/0,123) __________________ 123,0
NaN
Doslov s plovoucí desetinnou čárkou
Oracle také poskytuje některé literály s pohyblivou řádovou čárkou pro situace, které nelze vyjádřit jako číselný literál. Patří mezi ně binary_float_nan
což představuje hodnotu typu BINARY_FLOAT
pro kterou podmínka IS
NAN
je true a binary_double_nan
, což představuje hodnotu typu BINARY_DOUBLE
pro kterou podmínka IS
NAN
je pravda.
Zde je příklad použití těchto literálů s plovoucí desetinnou čárkou:
SELECT
NANVL(binary_double_nan, 0),
NANVL(binary_float_nan, 0)
FROM DUAL;
Výsledek:
NANVL(BINARY_DOUBLE_NAN,0) NANVL(BINARY_FLOAT_NAN,0) ______________________________ _______________________0_0 .00Předání čísla
Jak bylo zmíněno, pokud je prvním argumentem číslo, vrátí toto číslo:
SELECT NANVL(33, 0) FROM DUAL;
Výsledek:
NANVL(33,0) _______________ 33Nečíselné argumenty
Argumenty mohou být jakýkoli číselný datový typ nebo jakýkoli nenumerický datový typ, který lze implicitně převést na číselný datový typ.
Zde je příklad toho, co se stane, když argumenty nesplňují tato kritéria:
SELECT NANVL('Gosh', 'Dang') FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT NANVL('Do prdele', 'Dang')FROM DUALEchybové hlášení -ORA-01722:neplatné čísloNulové argumenty
NANVL()
vrátínull
pokud je nějaký argumentnull
:SET NULL 'null'; SELECT NANVL(null, 16), NANVL(1024, null), NANVL(null, null) FROM DUAL;
Výsledek:
NANVL(NULL,16) NANVL(1024,NULL) NANVL(NULL,NULL) _________________ ___________________ ___________________ null Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo, kdykoli se v důsledku příkazu SQLSELECT
objeví hodnota null. prohlášení.Můžete však použít
SET NULL
určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězecnull
by měl být vrácen.Chybí argumenty
Volání
NANVL()
bez jakýchkoli argumentů vede k chybě:SELECT NANVL() FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT NANVL()FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce:A totéž platí, když to voláte s příliš mnoha argumenty:
SELECT NANVL(10, 2, 3) FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT NANVL(10, 2, 3)FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce: