In Oracle Database, de NVL2()
functie stelt ons in staat om null-waarden te vervangen door een andere waarde.
Het is vergelijkbaar met de NVL()
functie, behalve dat het drie argumenten accepteert in plaats van twee. Dit stelt ons in staat om een andere waarde op te geven die moet worden geretourneerd in het geval dat het eerste argument niet null is.
Syntaxis
De syntaxis gaat als volgt:
NVL2(expr1, expr2, expr3)
Als expr1
is niet null, dan NVL2
retourneert expr2
. Als expr1
is null, dan NVL2
retourneert expr3
.
Voorbeeld
Hier is een voorbeeld om te demonstreren:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Resultaat:
3
Het eerste argument was null en dus werd het derde argument geretourneerd.
En dit is wat er gebeurt als het eerste argument niet nul is:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Resultaat:
2
Als de vervangingswaarden nul zijn
Als het tweede of derde argument null is, zou je een null-resultaat kunnen krijgen.
Voorbeeld:
SET NULL '(null)';
SELECT
NVL2(1, null, 3) AS "r1",
NVL2(null, 2, null) AS "r2"
FROM DUAL;
Resultaat:
r1 r2 _________ _________ (null) (null)
Met betrekking tot de eerste regel SET NULL '(null)';
, heb ik deze regel toegevoegd zodat mijn SQLcl-sessie die waarde retourneert wanneer het resultaat null is.
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null
treedt op als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd (zoals ik hier heb gedaan).
Ongeldig aantal argumenten
Het aanroepen van de functie zonder het doorgeven van argumenten resulteert in een fout:
SELECT NVL2()
FROM DUAL;
Resultaat:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"
En het doorgeven van te veel argumenten veroorzaakt ook een fout:
SELECT NVL2(1, 2, 3, 4)
FROM DUAL;
Resultaat:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"