本文实例讲述了mysql存储过程之case语句用法。分享给大家供大家参考,具体如下:

除了if语句,mysql提供了一个替代的条件语句CASE。 mysql的 CASE语句使代码更加可读和高效。废话不多说,我们先来看下简单case语句的语法:

CASE case_expression  WHEN when_expression_1 THEN commands  WHEN when_expression_2 THEN commands  ...  ELSE commandsEND 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$$
  • GetCustomerShipping存储过程接受客户编号作为IN参数,并根据客户所在国家返回运送时间。
  • 在存储过程中,首先,我们根据输入的客户编号得到客户的国家。然后使用简单CASE语句来比较客户的国家来确定运送期。如果客户位于美国(USA),则运送期为2天。 如果客户在加拿大,运送期为3天。 来自其他国家的客户则需要5天的运输时间。

来看下确定运输时间的逻辑的流程图:

以下是上述存储过程的测试脚本:

SET @customerNo = 112;SELECT country into @countryFROM customersWHERE customernumber = @customerNo;CALL GetCustomerShipping(@customerNo,@shipping);SELECT @customerNo AS Customer,    @country  AS Country,    @shipping  AS Shipping;

+----------+---------+----------------+
| Customer | Country | Shipping |
+----------+---------+----------------+
| 112 | USA | 2-day Shipping |
+----------+---------+----------------+
1 row in set

简单CASE语句仅允许我们将表达式的值与一组不同的值进行匹配。 为了执行更复杂的匹配,如范围,我们可以使用可搜索CASE语句。 可搜索CASE语句等同于IF语句,但是它的构造更加可读,来看下它的语法结构:

CASE  WHEN condition_1 THEN commands  WHEN condition_2 THEN commands  ...  ELSE commandsEND CASE;
DELIMITER $$CREATE PROCEDURE GetCustomerLevel( in p_customerNumber int(11),  out p_customerLevel varchar(10))BEGIN  DECLARE creditlim double;  SELECT creditlimit INTO creditlim FROM customers WHERE customerNumber = p_customerNumber;  CASE  WHEN creditlim > 50000 THEN   SET p_customerLevel = 'PLATINUM'; WHEN (creditlim <= 50000 AND creditlim >= 10000) THEN  SET p_customerLevel = 'GOLD'; WHEN creditlim < 10000 THEN  SET p_customerLevel = 'SILVER'; END CASE;END$$
  • 大于50K,则客户是PLATINUM客户。
  • 小于50K,大于10K,则客户是GOLD客户。
  • 小于10K,那么客户就是SILVER客户。

我们可以通过执行以下测试脚本来测试存储过程:

CALL GetCustomerLevel(112,@level);SELECT @level AS 'Customer Level';

+----------------+
| Customer Level |
+----------------+
| PLATINUM |
+----------------+
1 row in set

好啦,本次分享就到这里了。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL存储过程技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》及《MySQL数据库锁相关技巧汇总》

希望本文所述对大家MySQL数据库计有所帮助。

更多相关文章

  1. Android(安卓)-- Android(安卓)JUint 与 Sqlite
  2. android 当系统存在多个Launcher时,如何设置开机自动进入默认的La
  3. Android(安卓)SQLiteDatabase的使用
  4. android 通话记录次数
  5. Android(安卓)SQLiteDatabase的使用
  6. android实现关键字搜索功能
  7. 我的android 第14天 - 使用SQLiteDatabase操作SQLite数据库
  8. Android(安卓)编码规范
  9. android contentProvider例子

随机推荐

  1. Android之事件响应的两种模型分析
  2. Android 适配---notification led 呼吸灯
  3. Android 音频 OpenSL ES PCM数据播放
  4. Android 面试题总结之Android 基础(一)
  5. 披上ios外套的Android为何会格外受欢迎?
  6. 在Android核的java核心库libcore中打印lo
  7. 守护进程通信之Socket
  8. Android(安卓)源码系列之从源码的角度深
  9. Google 向左走,三星向右走
  10. Android的回调机制