久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么在mysql存儲(chǔ)過程中使用case語句

共計(jì) 2973 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。

自動(dòng)寫代碼機(jī)器人,免費(fèi)開通

今天就跟大家聊聊有關(guān)怎么在 mysql 存儲(chǔ)過程中使用 case 語句,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

除了 if 語句,mysql 提供了一個(gè)替代的條件語句 CASE。mysql 的 CASE 語句使代碼更加可讀和高效。廢話不多說,我們先來看下簡單 case 語句的語法:

CASE case_expression
 WHEN when_expression_1 THEN commands
 WHEN when_expression_2 THEN commands
 ...
 ELSE commands
END CASE;

我們可以使用簡單 CASE 語句來檢查表達(dá)式的值與一組唯一值的匹配,上述 sql 中,case_expression 可以是任何有效的表達(dá)式。我們將 case_expression 的值與每個(gè) WHEN 子句中的 when_expression 進(jìn)行比較,例如 when_expression_1,when_expression_2 等。如果 case_expression 和 when_expression_n 的值相等,則執(zhí)行相應(yīng)的 WHEN 分支中的命令 (commands)。如果 WHEN 子句中的 when_expression 與 case_expression 的值匹配,則 ELSE 子句中的命令將被執(zhí)行。其中,ELSE 子句是可選的,如果我們省略 ELSE 子句,并且找不到匹配項(xiàng),mysql 將引發(fā)錯(cuò)誤。我們來看個(gè)使用簡單的 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 存儲(chǔ)過程接受客戶編號(hào)作為 IN 參數(shù),并根據(jù)客戶所在國家返回運(yùn)送時(shí)間。

在存儲(chǔ)過程中,首先,我們根據(jù)輸入的客戶編號(hào)得到客戶的國家。然后使用簡單 CASE 語句來比較客戶的國家來確定運(yùn)送期。如果客戶位于美國 (USA),則運(yùn)送期為 2 天。如果客戶在加拿大,運(yùn)送期為 3 天。來自其他國家的客戶則需要 5 天的運(yùn)輸時(shí)間。

來看下確定運(yùn)輸時(shí)間的邏輯的流程圖:

怎么在 mysql 存儲(chǔ)過程中使用 case 語句

以下是上述存儲(chǔ)過程的測(cè)試腳本:

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;

執(zhí)行上面代碼,得到以下結(jié)果:

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

簡單 CASE 語句僅允許我們將表達(dá)式的值與一組不同的值進(jìn)行匹配。為了執(zhí)行更復(fù)雜的匹配,如范圍,我們可以使用可搜索 CASE 語句。可搜索 CASE 語句等同于 IF 語句,但是它的構(gòu)造更加可讀,來看下它的語法結(jié)構(gòu):

CASE
 WHEN condition_1 THEN commands
 WHEN condition_2 THEN commands
 ...
 ELSE commands
END CASE;

上述 sql 首先會(huì)評(píng)估求值 WHEN 子句中的每個(gè)條件,直到找到一個(gè)值為 TRUE 的條件,然后執(zhí)行 THEN 子句中的相應(yīng)命令 (commands)。如果沒有一個(gè)條件為 TRUE,則執(zhí)行 ELSE 子句中的命令 (commands)。如果不指定 ELSE 子句,并且沒有一個(gè)條件為 TRUE,mysql 將發(fā)出錯(cuò)誤消息。mysql 不允許在 THEN 或 ELSE 子句中使用空的命令。如果我們不想處理 ELSE 子句中的邏輯,同時(shí)又要防止 mysql 引發(fā)錯(cuò)誤,則可以在 ELSE 子句中放置一個(gè)空的 BEGIN END 塊。咱們來看下使用可搜索 CASE 語句來根據(jù)客戶的信用額度來查找客戶級(jí):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$$

在上面查詢語句邏輯中,如果信用額度是:

大于 50K,則客戶是 PLATINUM 客戶。

小于 50K,大于 10K,則客戶是 GOLD 客戶。

小于 10K,那么客戶就是 SILVER 客戶。

我們可以通過執(zhí)行以下測(cè)試腳本來測(cè)試存儲(chǔ)過程:

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

執(zhí)行上面查詢語句,得到以下結(jié)果:

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

看完上述內(nèi)容,你們對(duì)怎么在 mysql 存儲(chǔ)過程中使用 case 語句有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。

向 AI 問一下細(xì)節(jié)

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計(jì)2973字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 洪泽县| 建瓯市| 靖远县| 宜黄县| 广平县| 江源县| 莒南县| 城口县| 永顺县| 开化县| 收藏| 奉节县| 灌云县| 吉林省| 辉南县| 天峻县| 安阳县| 南涧| 灌云县| 措美县| 宣城市| 碌曲县| 崇礼县| 安阳市| 双桥区| 泽库县| 金坛市| 长沙市| 贞丰县| 贵德县| 迁西县| 沙河市| 航空| 石景山区| 辛集市| 中卫市| 汉源县| 宁化县| 新疆| 探索| 崇礼县|