DECODE-Funktion Oracle/PLSQL

In diesem Oracle-Lernprogramm wird erläutert, wie Sie die Oracle/PLSQL DECODE-Funktion mit Syntax und Beispielen verwenden.

Beschreibung

Die Oracle/PLSQL DECODE-Funktion hat die Funktionalität einer IF-THEN-ELSE-Anweisung.

Syntax

Die Syntax für die DECODE-Funktion in Oracle/PLSQL lautet:

DECODE( expression , search , result [, search , result]… [, default] )

Parameter oder Argumente

expression Der zu vergleichende Wert Es wird vor dem Vergleich automatisch in den Datentyp des ersten Suchwerts konvertiert.

search Der Wert, der mit dem expression verglichen wird. Alle Suchwerte werden vor dem Vergleich automatisch in den Datentyp des ersten Suchwerts konvertiert.

result Der zurückgegebene Wert, wenn der expression der search entspricht.

default Wahlweise. Wenn keine Übereinstimmungen gefunden werden, gibt die DECODE-Funktion den Standardwert zurück. Wenn der Standardwert nicht angegeben wird, gibt die DECODE-Funktion NULL zurück (wenn keine Übereinstimmungen gefunden werden).

Notiz

  • Die DECODE-Funktion gibt einen Wert zurück, der denselben Datentyp wie das erste Ergebnis in der Liste hat.
  • Wenn das erste Ergebnis NULL ist, wird der Rückgabewert in VARCHAR2 konvertiert.
  • Wenn das erste Ergebnis den Datentyp CHAR hat, wird der Rückgabewert in VARCHAR2 konvertiert.
  • Wenn keine Übereinstimmungen gefunden werden, wird der Standardwert zurückgegeben.
  • Wenn der Standardwert fehlt und keine Übereinstimmungen gefunden werden, wird NULL zurückgegeben.

Gilt für

Die DECODE-Funktion kann in folgenden Versionen von Oracle/PLSQL verwendet werden:

  • Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i

Beispiel

Die DECODE-Funktion kann in Oracle/PLSQL verwendet werden.

Sie können die DECODE-Funktion in einer SQL-Anweisung wie folgt verwenden:

Die obige DECODE-Anweisung entspricht der folgenden IF-THEN-ELSE-Anweisung:

Die DECODE-Funktion vergleicht jeden supplier_id-Wert nacheinander.

Häufig gestellte Fragen

Frage:

Einer unserer Zuschauer wollte wissen, wie man die DECODE-Funktion benutzt, um zwei Daten zu vergleichen (zB: date1 und date2), wobei, wenn date1> date2, die DECODE-Funktion date2 zurückgeben soll. Andernfalls sollte die DECODE-Funktion date1 zurückgeben.

Antwort:

Verwenden Sie dazu die DECODE-Funktion wie folgt:

Hilfreich Tip Nr. 1:

Einer unserer Viewer schlug vor, die SIGN-Funktion wie folgt mit der DECODE-Funktion zu kombinieren:

Das obige Datumsbeispiel könnte wie folgt geändert werden:

Die SIGN/DECODE – Kombination ist auch hilfreich für numerische Vergleiche, Sales Bonuses

Hilfreich Tip Nr. 2:

Einer unserer Viewer schlug vor, die LEAST-Funktion (anstelle der DECODE-Funktion) wie folgt zu verwenden:

Das obige Datumsbeispiel könnte wie folgt geändert werden:

Frage:

Ich würde gerne wissen, ob es möglich ist, die DECODE-Funktion für Zahlenbereiche zu verwenden, dh 1-10 = ‚category 1‘, 11-20 = ‚category 2‘, anstatt jede Zahl einzeln dekodieren zu müssen.

Antwort:

Leider können Sie die DECODE-Funktion nicht für Zahlenbereiche verwenden. Sie können jedoch versuchen, eine Formel zu erstellen, die für einen bestimmten Bereich eine Zahl und für den nächsten Bereich eine andere Zahl ergibt.

Beispielsweise:

In diesem Beispiel basierend auf der Formel:

Die Formel wird auf 0 ausgewertet, wenn die supplier_id zwischen 1 und 10 liegt.
Die Formel wird mit 1 bewertet, wenn die supplier_id zwischen 11 und 20 liegt.
Die Formel wird zu 2 ausgewertet, wenn die supplier_id zwischen 21 und 30 liegt.

und so weiter…

Frage:

Ich muss eine DECODE-Anweisung schreiben, die folgendes zurückgibt:

Wenn yrs_of_service <1, dann geben Sie 0.04 zurück Wenn yrs_of_service> = 1 und <5, dann geben Sie 0.04 zurück Wenn yrs_of_service> 5, dann geben Sie 0.06 zurück

Wie kann ich das machen?

Antwort:

Sie müssen eine Formel erstellen, die für jeden Ihrer Bereiche eine einzige Zahl ergibt.

Beispielsweise:

Frage:

Gibt es eine Begrenzung für die Anzahl der Argumente, die Sie in einer DECODE-Anweisung haben können? Ich erhalte einen Fehler, „ORA-00939: too many arguments for function“.

Antwort:

Ja, die maximale Anzahl von Komponenten, die Sie in einer DECODE-Funktion haben können, ist 255. Dies schließt die Argumente für Ausdruck, Suche und Ergebnis ein.