Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:sql_case_when

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
prog:sql_case_when [2016/04/04 11:19]
gpipperr [searched case expression]
prog:sql_case_when [2016/07/07 20:26] (aktuell)
gpipperr
Zeile 1: Zeile 1:
 +====== Oracle SQL und PL/SQL - der SQL CASE Ausdruck ======
 +**ab Oracle 8i:**\\
  
 +=== Searched case expression ===
 +
 +
 +Aufbau:
 +<code plsql>
 +CASE
 +   WHEN {test}
 +   THEN {code}
 +   [WHEN {test}]
 +   [THEN...]
 +   [ELSE...]
 +END
 +</code>
 +
 +1. Beispiel:
 +<code>
 +select ....
 + , ( case  
 +     when   ampel  = 'grün' then 'green'
 +     when   ampel  = 'rot' then 'red'
 +     else 'yellow' 
 +     end 
 +    )  as ampel
 + from ......   
 +
 +</code>
 +
 +
 +=== simple case expression=== 
 +**ab Oracle 9i:**\\
 +
 +Aufbau:
 +<code plsql>
 +CASE {value oder expression}
 +WHEN {match = True}
 +THEN {code} 
 + [WHEN...] 
 + [THEN...] 
 + [ELSE...] => immer null wenn nicht definiert und kein When Zweig getroffen \\
 +END
 +</code>
 +
 +2. Beispiel
 +
 +<code plsql>
 +select ....
 + , ( case  ampel
 +     when   'grün' then 'green'
 +     when   'rot'  then 'red'
 +     else   'yellow' 
 +     end 
 +    )  as ampel
 + from ......   
 +</code>
 +
 +
 +===== Case als Prädikat einer where Bedingung =====
 +
 +<code plsql>
 +select status from ampeln
 +where ( case  ampel
 +      when   'grün' then 1
 +      when   'rot'  then 0
 +      else   1
 +      end ) = 1
 +
 +</code>
 +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:
 +<code plsql>
 +select * 
 +from ampeln
 +order by ( case  ampel
 +      when   'grün' then 1
 +      when   'rot'  then 2
 +      else   3
 +      end )
 +</code>
 +
 +===== 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
"Autor: Gunther Pipperr"
prog/sql_case_when.txt · Zuletzt geändert: 2016/07/07 20:26 von gpipperr