CASE式を使用すると、プロシージャを起動せずに、SQL文でIF ... THEN ... ELSE論理を使用できます。構文は次のとおりです。

simple_case_expression::=

searched_case_expression::=

else_clause::=

単純CASE式では、Oracle Databaseは、exprとcomparison_exprが一致する最初のWHEN ... THENの組合せを検索し、return_exprを戻します。WHEN ... THENの組合せが条件に一致せず、ELSE句が存在する場合、Oracleはelse_exprを戻します。それ以外の場合、OracleはNULLを戻します。
検索CASE式では、Oracleは、conditionが真である項目を左から右へ検索し、return_exprを戻します。真であるconditionがなく、ELSE句が存在する場合、Oracleはelse_exprを戻します。それ以外の場合、OracleはNULLを戻します。
Oracle Databaseでは、短絡評価を使用します。単純CASE式では、データベースは、comparison_expr値のいずれかとexprを比較する前にすべてのcomparison_expr値を評価するのではなく、各comparison_expr値とexprを比較する前にのみ、各comparison_expr値を評価します。その結果、exprと等しいcomparison_exprが見つかると、Oracleはその後のcomparison_exprを評価しません。検索CASE式の場合、データベースは各conditionを評価してこれが真であるかどうかを判断します。ただし、あるconditionが真の場合は、次のconditionを評価しません。
単純CASE式では、exprおよびすべてのcomparison_expr値は、同じデータ型(CHAR、VARCHAR2、NCHAR、NVARCHAR2、NUMBER、BINARY_FLOATまたはBINARY_DOUBLE)であるか、またはすべて数値データ型である必要があります。すべての式が数値データ型の場合、Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。
単純および検索CASE式では、すべてのreturn_exprは、同じデータ型(CHAR、VARCHAR2、NCHAR、NVARCHAR2、NUMBER、BINARY_FLOATまたはBINARY_DOUBLE)であるか、またはすべて数値データ型である必要があります。すべての戻り式が数値データ型の場合、Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。
1つのCASE式では、引数の最大数は65535です。単純CASE式の初期式やオプションのELSE式を含むすべての式が、この上限の対象となります。WHEN ... THENの各組は、2つの引数としてカウントします。この上限を超えないように、CASE式をネストし、return_expr自体がCASE式となるようにすることができます。
| 関連項目: 
 | 
単純CASE式の例 次の文は、サンプル表oe.customersのそれぞれの顧客について、クレジット利用限度額を、$100の場合は「Low」、$5000の場合は「High」、それ以外の場合は「Medium」で表示します。
SELECT cust_last_name, CASE credit_limit WHEN 100 THEN 'Low' WHEN 5000 THEN 'High' ELSE 'Medium' END AS credit FROM customers ORDER BY cust_last_name, credit; CUST_LAST_NAME CREDIT -------------------- ------ Adjani Medium Adjani Medium Alexander Medium Alexander Medium Altman High Altman Medium . . .
検索CASE式の例 次の文は、$2000を最少額の給与として、サンプル表oe.employeesの従業員の給与の平均を検出します。
SELECT AVG(CASE WHEN e.salary > 2000 THEN e.salary
   ELSE 2000 END) "Average Salary" FROM employees e;
Average Salary
--------------
    6461.68224