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

COALESCE()-Funktion in Oracle

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"