Oracle – Funktion decode

Oracle bietet mit der Funktion decode einen Wert auf mehrere mögliche Werte zu vergleichen und bei Übereinstimmung einen speziellen Wert zurückzugeben. Dies entspricht einer verkürzten Form von der IF-THEN-ELSE Syntax.

Syntax: decode( expression , search , result [, search , result]… [, default] )

expression – Ausgangswert der mit den Werten aus search verglichen werden soll
search – Vergleichswert; bei Übereinstimmung mit expression wird result zurückgeliefert
result – Wird als Ergebnis zurückgeliefert, falls expression gleich search ist
default – Sollte keine Übereinstimmung auftreten so wird dieser Wert zurückgegeben

Beispiel:

select decode(POSTLEITZAHL, 70599, 'Stuttgart - Asemwald',
                            70499, 'Stuttgart - Bergheim',
                            'UNBEKANNT') 
  from ADRESSE;

Ohne diese Ausdruck hätte obiger Select folgendermaßen ausgesehen:

select case when POSTLEITZAHL = 70599
             then 'Stuttgart - Asemwald'
            when POSTLEITZAHL = 70499
             then 'Stuttgart - Bergheim'
            else 'UNBEKANNT' end 
  from ADRESSE;

Aus Performancesicht ist ein case-when-Block performanter als die decode-Funktion.
Die Funktion kann auch in Funktionen angewandt werden, dann ersetzt die Funktion einen IF-THEN-ELSE Block:

if POSTLEITZAHL = 70599 then
 result := 'Stuttgart - Asemwald';
elsif POSTLEITZAHL = 70499 then
 result := 'Stuttgart - Bergheim';
else
 result := 'Unbekannt';
end if;