真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在mysql存儲過程中使用case語句

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

創(chuàng)新互聯(lián)公司長期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為雙江企業(yè)提供專業(yè)的網(wǎng)站設(shè)計、網(wǎng)站制作,雙江網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

除了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的值相等,則執(zhí)行相應(yīng)的WHEN分支中的命令(commands)。如果WHEN子句中的when_expression與case_expression的值匹配,則ELSE子句中的命令將被執(zhí)行。其中,ELSE子句是可選的,如果我們省略ELSE子句,并且找不到匹配項,mysql將引發(fā)錯誤。我們來看個使用簡單的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參數(shù),并根據(jù)客戶所在國家返回運送時間。

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

來看下確定運輸時間的邏輯的流程圖:

怎么在mysql存儲過程中使用case語句

以下是上述存儲過程的測試腳本:

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語句僅允許我們將表達式的值與一組不同的值進行匹配。 為了執(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首先會評估求值WHEN子句中的每個條件,直到找到一個值為TRUE的條件,然后執(zhí)行THEN子句中的相應(yīng)命令(commands)。如果沒有一個條件為TRUE,則執(zhí)行ELSE子句中的命令(commands)。如果不指定ELSE子句,并且沒有一個條件為TRUE,mysql將發(fā)出錯誤消息。mysql不允許在THEN或ELSE子句中使用空的命令。 如果我們不想處理ELSE子句中的邏輯,同時又要防止mysql引發(fā)錯誤,則可以在ELSE子句中放置一個空的BEGIN END塊。咱們來看下使用可搜索CASE語句來根據(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í)行以下測試腳本來測試存儲過程:

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

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

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

看完上述內(nèi)容,你們對怎么在mysql存儲過程中使用case語句有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)站標(biāo)題:怎么在mysql存儲過程中使用case語句
標(biāo)題URL:http://weahome.cn/article/jspcio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部