In der Oracle-Datenbank die COALESCE()
Funktion gibt den ersten Nicht-Null-Ausdruck der Ausdrucksliste zurück.
Syntax
Die Syntax lautet wie folgt:
COALESCE(expr [, expr ]...)
Es müssen mindestens zwei Ausdrücke übergeben werden.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung:
SELECT COALESCE(null, 7)
FROM DUAL;
Ergebnis:
7
Hier sind einige weitere Beispiele:
SET NULL 'null';
SELECT
COALESCE(null, null, 1, 2, 3) AS "r1",
COALESCE(1, null, 2, 3) AS "r2",
COALESCE(null, 3, 2, 1) AS "r3",
COALESCE(1, 2, 3, null) AS "r4",
COALESCE(null, null) AS "r5"
FROM DUAL;
Ergebnis:
r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null
Wir können das COALESCE()
sehen gibt null
zurück wenn alle Argumente null sind.
Bezüglich der ersten Zeile SET NULL 'null';
, habe ich hinzugefügt, damit meine SQLcl-Sitzung null
zurückgibt immer 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. Hier habe ich angegeben, dass der String null
zurückgegeben werden soll.
Datenbankbeispiel
Angenommen, wir führen die folgende Abfrage aus:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Ergebnis:
LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Tokyo Prefecture 1300 null 1400 Texas 1500 California
Wir können sehen, dass einige der Zeilen null
sind im STATE_PROVINCE
Spalte.
Hier ist die Abfrage noch einmal, außer dass wir dieses Mal COALESCE()
verwenden gegen STATE_PROVINCE
Spalte:
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Ergebnis:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A') ______________ _________________________________ 1000 N/A 1100 N/A 1200 Tokyo Prefecture 1300 N/A 1400 Texas 1500 California
Also haben wir COALESCE()
verwendet um N/A
zurückzugeben immer wenn ein Nullwert aufgetreten ist.
COALESCE()
vs. CASE
Folgendes:
COALESCE(expr1, expr2)
Ist äquivalent zu:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Ungültige Argumentanzahl
Der Aufruf der Funktion ohne Übergabe von Argumenten führt zu einem Fehler:
SELECT COALESCE()
FROM DUAL;
Ergebnis:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"