条件式(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_exprのデータ型は同じでなければなりません(例: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;