此语句用于根据多种情况选择执行路径。
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 数据类型。如果 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 表达式。
无。
无。
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; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |