I Oracle Database er NVL2()
funktion giver os mulighed for at erstatte nulværdier med en anden værdi.
Det ligner NVL()
funktion, bortset fra at den accepterer tre argumenter i stedet for to. Dette giver os mulighed for at angive en anden værdi, der skal returneres i tilfælde af, at det første argument ikke er null.
Syntaks
Syntaksen ser sådan ud:
NVL2(expr1, expr2, expr3)
Hvis expr1
er ikke null, derefter NVL2
returnerer expr2
. Hvis expr1
er null, derefter NVL2
returnerer expr3
.
Eksempel
Her er et eksempel til demonstration:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Resultat:
3
Det første argument var nul, så det tredje argument blev returneret.
Og her er, hvad der sker, når det første argument ikke er nul:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Resultat:
2
Når erstatningsværdierne er nul
Hvis det andet eller tredje argument er null, kan du ende med et nulresultat.
Eksempel:
SET NULL '(null)';
SELECT
NVL2(1, null, 3) AS "r1",
NVL2(null, 2, null) AS "r2"
FROM DUAL;
Resultat:
r1 r2 _________ _________ (null) (null)
Angående den første linje SET NULL '(null)';
, tilføjede jeg denne linje, så min SQLcl-session returnerer denne værdi, når resultatet er null.
Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null
opstår som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres (som jeg har gjort her).
Ugyldigt argumentantal
Kaldning af funktionen uden at sende nogen argumenter resulterer i en fejl:
SELECT NVL2()
FROM DUAL;
Resultat:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"
Og at sende for mange argumenter medfører også en fejl:
SELECT NVL2(1, 2, 3, 4)
FROM DUAL;
Resultat:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"