Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (A ~ D)

 

CASE 文

この文は、複数の状況に基づいた実行パスを選択するために使用します。

構文 1
CASE value-expression
WHEN [ constant | NULL ] THEN statement-list ...
[ WHEN [ constant | NULL ] THEN statement-list ] ...
[ ELSE statement-list ]
END [ CASE ]
構文 2
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 を異なる式で置き換えます。

構文 2   この形式の文は、CASE 文中で最初に条件と一致した search-condition に対して実行されます。条件と一致する search-conditions がない場合は、ELSE 句が実行されます。

式が NULL でもよい場合は、最初の search-condition に次の構文を使用します。

WHEN search-condition IS NULL THEN statement-list
CASE 文は CASE 式とは異なります。

CASE 文の構文と CASE 式の構文を混同しないでください。CASE 式を参照してください。

パーミッション

なし

関連する動作

なし

参照
標準と互換性
  • SQL/2003   永続的ストアド・モジュール機能。

CASE 文を使用する次のプロシージャは、SQL Anywhere サンプル・データベースの Products テーブルにリストされている製品を、シャツ、帽子、ショート・パンツ、不明のいずれかに分類します。

CREATE PROCEDURE ProductType (IN product_ID INT, OUT type CHAR(10))
BEGIN
   DECLARE prod_name CHAR(20);
   SELECT Name INTO prod_name FROM Products
   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 を使用して、SQL Anywhere サンプル・データベース内の製品数量に関するメッセージを生成します。

CREATE PROCEDURE StockLevel (IN product_ID INT)
BEGIN
   DECLARE qty INT;
   SELECT Quantity INTO qty FROM Products
   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;
END;