条件式(Case Expression)は、ユーザーがストアドプロシージャを呼び出すことなく、SQL文内でIF ... THEN ... ELSE構文を使用できるようにします。
条件式の構文
CASE { simple_case_expression
| searched_case_expression
}
[ ELSE else_expr ]
END
シンプル条件式 simple_case_expression
expr
{ WHEN comparison_expr THEN return_expr }...
サーチ条件式 searched_case_expression
{ WHEN condition THEN return_expr }...
使用規則
条件の検証
シンプル条件式では、OceanBaseデータベースはexprを基準にして、WHEN ... THEN内で最初に等しい値を持つcomparison_exprを検索し、対応するreturn_exprを返します。もしWHEN ... THENでこの条件を満たすものがなく、かつELSE節が存在する場合、OceanBaseデータベースはelse_exprを返します。それ以外の場合、OceanBaseデータベースはNULLを返します。
サーチ条件式では、OceanBaseデータベースは左から右へとcondition条件が成立するまで検索し、その後return_exprを返します。すべての条件が成立せず、かつELSE節が存在する場合、データベースはelse_exprを返します。それ以外の場合、OceanBaseデータベースはNULLを返します。
条件の計算
OceanBaseデータベースはショートカット評価を使用します。シンプル条件式の場合、データベースはexprと比較する前に、すべてのcomparison_exprの値を一度に計算するのではなく、順番に計算します。したがって、前のcomparison_exprがexprと等しい場合、OceanBaseデータベースは次のcomparison_exprの値を計算しません。サーチ条件式の場合、データベースは各conditionが真であるかどうかを直列的に計算します。前のconditionが真である場合、OceanBaseデータベースは次のconditionを計算しません。
データ型
シンプル条件式では、exprとすべてのcomparison_exprの値のデータ型は同じでなければなりません(例えばCHAR、VARCHAR2、およびNCHAR;NVARCHAR2、NUMBER、およびBINARY_FLOAT;BINARY_DOUBLE)、またはすべて数値型である必要があります。すべての返却式が数値型の場合、OceanBaseデータベースは最も優先度の高いデータ型を選択し、他のパラメータを明示的にこのデータ型に変換して、そのデータ型の値を返します。
シンプル条件式とサーチ条件式の場合、すべてのreturn_exprsのデータ型は同じでなければなりません(例えばCHAR、VARCHAR2、およびNCHAR;NVARCHAR2、NUMBER、およびBINARY_FLOAT;BINARY_DOUBLE)、またはすべて数値型である必要があります。すべての返却式が数値型の場合、OceanBaseデータベースは最も優先度の高いデータ型を選択し、他のパラメータを明示的にこのデータ型に変換して、そのデータ型の値を返します。
例
シンプル条件式の例
SELECT cust_last_name,
CASE sale_quantity
WHEN 100 THEN 'Low'
WHEN 500 THEN 'High'
ELSE 'Medium' END AS quantity
FROM customer
ORDER BY cust_last_name, quantity;
サーチ条件式の例
SELECT AVG(CASE WHEN e.salary > 6000 THEN e.salary
ELSE 6000 END) "Average Salary" FROM employees e;