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