この文は、複数の状況に基づいた実行パスを選択するために使用します。
CASE value-expression
WHEN [ constant | NULL ] THEN statement-list ...
[ WHEN [ constant | NULL ] THEN statement-list ] ...
[ ELSE statement-list ]
END CASE
CASE
WHEN [ search-condition | NULL] THEN statement-list ...
[ WHEN [ search-condition | NULL] THEN statement-list ] ...
[ ELSE statement-list ]
END CASE
構文 1 CASE 文は制御文であり、これを使用して SQL 文のリストから式の値に対応する文を選択して実行できます。value-expression は、文字列、数値、日付、その他の SQL データ型などの単一の値を取る式です。WHEN 句が value-expression の値に対して存在する場合、WHEN 句の中の statement-list が実行されます。適切な WHEN 句が存在せず、ELSE 句が存在する場合、ELSE 句の statement-list が実行されます。END CASE の後に記述されている最初の文から実行が再開されます。
value-expression が null でよい場合は、ISNULL 関数を使用して NULL の value-expression を異なる式で置き換えます。
ISNULL 関数の詳細については、ISNULL 関数 [データ型変換] を参照してください。
構文 2 このフォームの文は、CASE 文中で最初に条件と一致した search-condition に対して実行されます。条件と一致する search-conditions がない場合は、ELSE 句が実行されます。
式が NULL でもよい場合は、最初の search-condition に次の構文を使用します。
WHEN search-condition IS NULL THEN statement-list
NULL 値の詳細については、不定の値:NULL を参照してください。
CASE 文は CASE 式とは異なります。CASE 文の構文と CASE 式の構文を混同しないでください。CASE 式の詳細については、CASE 式を参照してください。 |
なし
なし
SQL/92 永続的ストアド・モジュール機能。Adaptive Server Anywhere は、WHEN NULL を許容する CASE 文をサポートしています。これは、SQL/92 標準に対するベンダ拡張です。
SQL/99 永続的ストアド・モジュール機能。Adaptive Server Anywhere は、WHEN NULL を許容する CASE 文をサポートしています。これは、SQL/92 標準に対するベンダ拡張です。
Sybase Adaptive Server Enterprise ではサポートされていません。
case 文を使用する次の文は、サンプル・データベースの product テーブルにリストされている製品を、シャツ、帽子、ショート・パンツ、不明のいずれかに分類します。
CREATE PROCEDURE ProductType (IN product_id INT, OUT type CHAR(10))
BEGIN
DECLARE prod_name CHAR(20);
SELECT name INTO prod_name FROM "DBA"."product"
WHERE id = product_id;
CASE prod_name
WHEN 'Tee Shirt' THEN
SET type = 'Shirt'
WHEN 'Sweatshirt' THEN
SET type = 'Shirt'
WHEN 'Baseball Cap' THEN
SET type = 'Hat'
WHEN 'Visor' THEN
SET type = 'Hat'
WHEN 'Shorts' THEN
SET type = 'Shorts'
ELSE
SET type = 'UNKNOWN'
END CASE;
END次の例は、構文 2 を使用して、サンプル・データベース内の製品数量に関するメッセージを生成します。
CREATE PROCEDURE StockLevel (IN product_id INT)
BEGIN
DECLARE qty INT;
SELECT quantity INTO qty FROM product
WHERE id = product_id;
CASE
WHEN qty < 30 THEN
MESSAGE 'Order Stock' TO CLIENT;
WHEN qty > 100 THEN
MESSAGE 'Overstocked' TO CLIENT;
ELSE
MESSAGE 'Sufficient stock on hand' TO CLIENT;
END CASE;
ENDSQL Anywhere Studio 9.0.2
Copyright © 1989–2005 Sybase, Inc. Portions copyright © 2001–2005 iAnywhere Solutions, Inc. All rights reserved.