mysql存储过程之存储过程之case语句用法实例详解语句用法实例详解
本文实例讲述了mysql存储过程之case语句用法。分享给大家供大家参考,具体如下:
除了if语句,mysql提供了一个替代的条件语句CASE。 mysql的 CASE语句使代码更加可读和高效。废话不多说,我们先来看
下简单case语句的语法:
CASE case_expression
WHEN when_expression_1 THEN commands
WHEN when_expression_2 THEN commands
...
ELSE commands
END CASE;
我们可以使用简单CASE语句来检查表达式的值与一组唯一值的匹配,上述sql中,case_expression可以是任何有效的表达
式。我们将case_expression的值与每个WHEN子句中的when_expression进行比较,例如
when_expression_1,when_expression_2等。如果case_expression和when_expression_n的值相等,则执行相应的WHEN
分支中的命令(commands)。如果WHEN子句中的when_expression与case_expression的值匹配,则ELSE子句中的命令将被
执行。其中,ELSE子句是可选的,如果我们省略ELSE子句,并且找不到匹配项,mysql将引发错误。我们来看个使用简单的
CASE语句的例子:
DELIMITER $$
CREATE PROCEDURE GetCustomerShipping(
in p_customerNumber int(11),
out p_shiping varchar(50))
BEGIN
DECLARE customerCountry varchar(50);
SELECT country INTO customerCountry
FROM customers
WHERE customerNumber = p_customerNumber;
CASE customerCountry
WHEN 'USA' THEN
SET p_shiping = '2-day Shipping';
WHEN 'Canada' THEN
SET p_shiping = '3-day Shipping';
ELSE
SET p_shiping = '5-day Shipping';
END CASE;
END$$
上述sql的工作方式如下:
GetCustomerShipping存储过程接受客户编号作为IN参数,并根据客户所在国家返回运送时间。
在存储过程中,首先,我们根据输入的客户编号得到客户的国家。然后使用简单CASE语句来比较客户的国家来确定运送期。
如果客户位于美国(USA),则运送期为2天。 如果客户在加拿大,运送期为3天。 来自其他国家的客户则需要5天的运输时间。
来看下确定运输时间的逻辑的流程图:
以下是上述存储过程的测试脚本: