Oracle
 sql >> Datenbank >  >> RDS >> Oracle

NVL2()-Funktion in Oracle

In der Oracle-Datenbank die NVL2() Mit der Funktion können wir Nullwerte durch einen anderen Wert ersetzen.

Es ähnelt dem NVL() -Funktion, außer dass sie drei statt zwei Argumente akzeptiert. Dadurch können wir einen anderen Wert angeben, der zurückgegeben werden soll, falls das erste Argument nicht null ist.

Syntax

Die Syntax sieht so aus:

NVL2(expr1, expr2, expr3)

Wenn expr1 nicht null ist, dann NVL2 gibt expr2 zurück . Wenn expr1 null ist, dann NVL2 gibt expr3 zurück .

Beispiel

Hier ist ein Beispiel zur Veranschaulichung:

SELECT NVL2(null, 2, 3)
FROM DUAL;

Ergebnis:

3

Das erste Argument war null und daher wurde das dritte Argument zurückgegeben.

Und Folgendes passiert, wenn das erste Argument nicht null ist:

SELECT NVL2(1, 2, 3)
FROM DUAL;

Ergebnis:

2

Wenn die Ersatzwerte Null sind

Wenn das zweite oder dritte Argument null ist, könnte das Ergebnis null sein.

Beispiel:

SET NULL '(null)';
SELECT 
    NVL2(1, null, 3) AS "r1",
    NVL2(null, 2, null) AS "r2"
FROM DUAL;

Ergebnis:

       r1        r2 
_________ _________ 
   (null)    (null)

Bezüglich der ersten Zeile SET NULL '(null)'; , habe ich diese Zeile hinzugefügt, damit meine SQLcl-Sitzung diesen Wert zurückgibt, wenn das Ergebnis null ist.

Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null tritt als Ergebnis eines SQL SELECT auf Erklärung.

Sie können jedoch SET NULL verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll (wie ich es hier getan habe).

Ungültige Argumentanzahl

Der Aufruf der Funktion ohne Übergabe von Argumenten führt zu einem Fehler:

SELECT NVL2()
FROM DUAL;

Ergebnis:

SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"

Und das Übergeben zu vieler Argumente verursacht auch einen Fehler:

SELECT NVL2(1, 2, 3, 4)
FROM DUAL;

Ergebnis:

SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"