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 数据类型。如果 value-expression 的值存在匹配的 WHEN 子句,则执行 WHEN 子句中的 statement-list。如果没有合适的 WHEN 子句而有 ELSE 子句,则执行 ELSE 子句中的 statement-list。执行过程从 END CASE 之后的第一个语句开始继续。

如果 value-expression 可以为空,可使用 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;