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

So verwenden Sie die Coalesce-Funktion in Oracle

Was ist die Coalesce-Funktion

Koaleszenzfunktion ist eine nützliche Funktion in Oracle und sehr nützlich, wenn wir die ersten Nicht-Null-Werte in der Liste zurückgeben möchten. Dieses SQL-Tutorial enthält Erklärungen, Beispiele für die Coalesce-Funktion in Oracle und den Unterschied zwischen Coalesce und NVL

Ausdruck1 :Dies wird zurückgegeben, wenn es nicht null ist
expr2:Dies wird zurückgegeben, wenn es nicht null ist und der erste Ausdruck null ist
exprn:Dies wird zurückgegeben, wenn der vorhergehende Ausdruck null ist

Coalesce in Oracle gibt also den ersten Ausdruck zurück, wenn er nicht null ist, sonst wird der Rest des Ausdrucks zusammengeführt

Wichtiger Punkt

(1)Oracle Database verwendet eine Kurzschlussauswertung. Die Datenbank wertet jeden expr-Wert aus und bestimmt, ob er NULL ist, statt alle expr-Werte auszuwerten, bevor bestimmt wird, ob einer von ihnen NULL ist.

(2)COALESCE in Oracle entspricht der Case-Funktion

COALESCE (expr1, expr2) ist also äquivalent zu:

CASE WHEN expr1 IS NOT NULL THEN expr1

ELSE expr2 END

Ebenso

COALESCE (expr1, expr2, …, exprn), für n>=3 ist äquivalent zu:

CASE WHEN expr1 IS NOT NULL THEN expr1
WHEN expr2 IS NOT NULL THEN expr2

WHEN expr3 IS NOT NULL THEN expr3

WHEN exprn IS NOT NULL THEN exprn

END

Oder dies kann geschrieben werden als

CASE WHEN expr1 IS NOT NULL THEN expr1
ELSE COALESCE (expr2, ..., exprn) END

(3) Normalerweise sollten alle expr der Coalesce-Anweisung denselben Datentyp haben, sonst wird ORA-00932 zurückgegeben.

SQL> select coalesce('a',1,2) from dual;
select coalesce('a',1,2) from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected CHAR got NUMBER

Wenn alle Vorkommen von expression ein numerischer Datentyp oder ein beliebiger nicht numerischer Datentyp sind, der implizit in einen numerischen Datentyp konvertiert werden kann, bestimmt Oracle Database das Argument mit dem höchsten numerischen Vorrang, konvertiert die verbleibenden Argumente implizit in diesen Datentyp und gibt diesen Datentyp zurück.

So verwenden Sie die Coalesce-Funktion

SQL> select coalesce(1,2,3) from dual;
COALESCE(1,2,3)
---------------
1

SQL> SELECT COALESCE(null, null, null, 'X', 'Y');
COALESCE(...)
---------------
X

Koaleszenzbeispiele

Angenommen, wir haben eine Mitarbeiter-Orakeltabelle, die aus Adresse1, Adresse2 und Adresse3 besteht, und wir möchten die erste Nicht-Null-Adresse der Mitarbeiter aus der Tabelle in der Reihenfolge der Priorität Adresse1> Adresse2> Adresse3

drucken
select emp_name, COALESCE(address1,address2,address3) from employee;

Unterschied zwischen Coalesce- und NVL-Funktion

  1. Coalesce ist eine Verallgemeinerung der NVL-Funktion. Die NVL-Funktion kann für zwei Ausdrücke verwendet werden, während die Koaleszenz für Viele verwendet werden kann
  2. Im Fall von zwei Ausdrücken sind sie gleich, aber die Implementierung ist unterschiedlich. Oracle wertet beide Ausdrücke im Fall von NVL aus, während es im Fall von Coalesce nur den ersten Ausdruck auswertet. Wenn also der zweite Ausdruck Fehler enthält, gibt NVL einen Fehler aus während Koaleszenz nicht.
  3. Coalesce ist ANSI-Standard, während NVL Oracle-spezifisch ist

Verwandte Artikel

Oracle Sql-Tutorial
NULLIF-Funktion in Oracle
NVL-Funktion in Oracle
Oracle LISTAGG-Funktion
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ functions023.htm#SQLRF00617