• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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的工作方式如下:

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

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

    SET @customerNo = 112;
    SELECT country into @country
    FROM customers
    WHERE 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 commands
    END CASE;
    
    

    上述sql首先会评估求值WHEN子句中的每个条件,直到找到一个值为TRUE的条件,然后执行THEN子句中的相应命令(commands)。如果没有一个条件为TRUE,则执行ELSE子句中的命令(commands)。如果不指定ELSE子句,并且没有一个条件为TRUE,mysql将发出错误消息。mysql不允许在THEN或ELSE子句中使用空的命令。 如果我们不想处理ELSE子句中的逻辑,同时又要防止mysql引发错误,则可以在ELSE子句中放置一个空的BEGIN END块。咱们来看下使用可搜索CASE语句来根据客户的信用额度来查找客户级:SILVER,GOLD或PLATINUM的案例:

    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$$
    
    

    在上面查询语句逻辑中,如果信用额度是:

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

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

    执行上面查询语句,得到以下结果:

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

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

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

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

    您可能感兴趣的文章:
    • MySQL case when使用方法实例解析
    • MySQL排序中使用CASE WHEN的方法示例
    • 深入浅析MySQL 中 Identifier Case Sensitivity问题
    • mysql case when group by 实例详解
    • 详解Mysql case then使用
    • mysql update case 更新字段值不固定的操作
    上一篇:mysql存储过程之if语句用法实例详解
    下一篇:MySQL流程函数常见用法实例分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mysql存储过程之case语句用法实例详解 mysql,存储,过程,之,case,语句,