prog:sql_case_when
Inhaltsverzeichnis
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
prog/sql_case_when.txt · Zuletzt geändert: 2016/07/07 20:26 von gpipperr