如何在mysql存储过程中使用case语句

分类:编程技术 时间:2024-02-20 15:24 浏览:0 评论:0
0
今天就和大家聊聊如何在mysql存储过程中使用case语句。很多人可能对此还不是很了解。为了让大家更好的了解,小编为大家总结了以下内容。希望您能从本文中有所收获。 。

除了if语句之外,mysql还提供了另一种条件语句CASE。 MySQL的CASE语句使代码更具可读性和效率。话不多说,让我们看一下简单的 case 语句的语法:

CASE case_expression WHEN when_expression_1 THEN 命令 WHEN when_expression_2 THEN 命令 ... ELSE命令END CASE;

我们可以使用一个简单的CASE语句来检查表达式的值是否与一组唯一值匹配。在上面的sql中,case_expression可以是任何有效的表达式。我们在每个WHEN子句中将case_expression的值与when_expression进行比较,例如when_expression_1、when_expression_2等。如果cas的值e_expression 和when_expression_n 相等时,执行相应WHEN 分支中的命令。如果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客户国家 varchar(50);从客户中选择国家/地区 INTO customerCountry WHERE customerNumber = p_customerNumber; CASE customerCountry WHEN 'USA' THEN SET p_shiping = '2-day Shipping';当“加拿大”设置 p_shiping = '3 天运送' ; ELSE SET p_shiping = '5 天运送'; END CASE;END$$

上述 SQL 的工作原理如下:

GetCustomerShipping 存储过程接受客户编号作为 IN 参数,以及基于客户所在国家/地区的退货运输时间。

在存储过程中,首先我们根据输入的客户编号获取客户所在的国家。然后使用简单的 CASE 语句来比较客户所在的国家/地区以确定运输期限。如果客户位于美国 (USA),则运送期限为 2 天。如果客户在加拿大,运送期限为 3 天。来自其他国家/地区的客户需要 5 天的运输时间。

我们看一下确定发货时间的逻辑流程图:

下面是上述存储过程的测试脚本:< /p>

SET @customerNo = 112;将国家/地区选择为 @countryFROMcustomersWHERE customernumber = @customerNo;CALL GetCustomerShipping(@customerNo,@shipping);SELECT @customerNo AS Customer, @country AS Country, @shipping AS Shipping;

执行上述代码,得到如下结果:

+----------+---- -----+----------------+
|客户|国家 |运输 |
+---------+---------+----------------+
| 112 | 112美国 | 2 天运送 |
+----------+----------+---------------- +< br/>1 row in set

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

CASE WHEN condition_1 THENCommands WHENcondition_2THENCommands 。 .. ELSE命令END CASE;

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

DELIMITER $$CREATE过程 GetCustomerLevel( in p_customerNumber int(11), out p_customerLevel varchar(10))开始声明 Creditlim double; SELECT 信用额度 INTO Creditlim FROM 客户 WHERE customerNumber = p_customerNumber;当 Creditlim > 50000 时,设置 p_customerLevel = 'PLATINUM'; WHEN (creditlim <= 50000 AND Creditlim >= 10000) THEN SET p_customerLevel = 'GOLD';当 Creditlim < 10000 时,设置 p_customerLevel = 'SILVER'; END CASE;END$$

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

大于50K,则该客户为PLATINUM客户。

如果小于 50K 且大于 10K,则该客户是 GOLD 客户。

如果低于 10K,则该客户是银级客户。

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

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

执行上述查询语句,得到如下结果:

+----------------+< br/> |客户级别 |
+-------------+
| PLATINUM |
+------------ ----+
集合中 1 行

阅读后通过以上内容,大家是不是对mysql存储过程中如何使用case语句有了进一步的了解呢? ?如果您想了解更多知识或相关内容,请关注行业资讯频道。感谢您的支持。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在mysql存储过程中使用case语句

用户评论