Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:sql_case_when

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

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
prog/sql_case_when.txt · Zuletzt geändert: 2016/07/07 20:26 von gpipperr