====== Oracle SQL und PL/SQL - der SQL CASE Ausdruck ======
**ab Oracle 8i:**\\
=== Searched case expression ===
Aufbau:
CASE
WHEN {test}
THEN {code}
[WHEN {test}]
[THEN...]
[ELSE...]
END
1. Beispiel:
select ....
, ( case
when ampel = 'grün' then 'green'
when ampel = 'rot' then 'red'
else 'yellow'
end
) as ampel
from ......
=== simple case expression===
**ab Oracle 9i:**\\
Aufbau:
CASE {value oder expression}
WHEN {match = True}
THEN {code}
[WHEN...]
[THEN...]
[ELSE...] => immer null wenn nicht definiert und kein When Zweig getroffen \\
END
2. Beispiel
select ....
, ( case ampel
when 'grün' then 'green'
when 'rot' then 'red'
else 'yellow'
end
) as ampel
from ......
===== Case als Prädikat einer where Bedingung =====
select status from ampeln
where ( case ampel
when 'grün' then 1
when 'rot' then 0
else 1
end ) = 1
findet alle bis auf die gelben Ampeln
===== Case im Order by zum Sortiern von Daten durch Cluster Bildung =====
Da in der Test Bedingung auch komplexes Vergleiche möglich sind, können so Daten in Cluster zerlegt werden.
Einfaches Beispiel:
select *
from ampeln
order by ( case ampel
when 'grün' then 1
when 'rot' then 2
else 3
end )
===== ORA-06592: CASE not found while executing CASE statement =====
Immer darauf achten das auch wirklich jeder Case Abschnitt erreicht werden kann, bzw. immer einen ELSE Zweig in die Logik einbauen!
===== Quellen =====
Oracle 12c - Database PL/SQL Language Reference => https://docs.oracle.com/database/121/LNPLS/case_statement.htm#LNPLS01304