MySql存儲過程—5、邏輯判斷,條件控制
相關鏈接:
MySql存儲過程—1、SQL存儲過程的基礎知識
http://www.BkJia.com/database/201208/148790.html;
MySql存儲過程—2、第一個MySql存儲過程的建立
http://www.BkJia.com/database/201208/148791.html;
MySql存儲過程—3、變量
http://www.BkJia.com/database/201208/149069.html;
MySql存儲過程—4、參數
http://www.BkJia.com/database/201208/149113.html
同編寫程序類似,存儲過程中也有對應的條件判斷,功能類似於if、switch。在MySql裡面對應的是IF和CASE
1、IF判斷
IF判斷的格式是這樣的:
[sql]
IF expression THEN commands
[ELSEIF expression THEN commands]
[ELSE commands]
END IF; www.2cto.com
這裡expression是我們的判斷表達式;ELSE IF 和ELSE都是可選的;command就是當條件為真(true為1,false為0)時執行的命令。比如我們設計一個存儲過程用於返回商品的價格,這裡價格通過傳入的參數來判斷是要帶稅收的價格還是沒有帶稅收的價格。先看看表的數據:
然後下面是我們的存儲過程:
存儲過程的話有兩個輸入參數,第一個isTaxed表示是不是要帶稅價格,第二個是產品的名稱;在存儲過程裡面定義了兩個變量,finalPrice用來保存價格,而taxRate表示稅率。這裡代碼比較簡單,就是判斷下如果是要加稅,就把原來的價格乘上稅率。下面是測試結果:
true的情況表示是帶稅的價格。好了這個是使用IF的一個例子,下面看看CASE;
2、CASE的使用
同編程裡面的那個switch ....case.....類似,使用CASE同編程一樣也是當判斷比較多時便於閱讀和維護,我們也來看下CASE的語法:
[sql]
CASE case_expression
WHEN when_expression THEN commands
WHEN when_expression THEN commands
...
ELSE commands
END CASE;
a、這裡可以看到CASE好比我們編程裡面的那個switch,後面的case_expression就好比switch後面跟著的表達式; www.2cto.com
b、然後WHEN則類似編程裡面的case,when_expression類似case後面跟著的值,commands則對應於相應的case下執行的命令;
c、最後一個 ELSE 則類似於default,就是如果都沒在上面那些WHEN裡面的情況時執行的命令。
下面我們假設不同類型的商品對應的稅收稅率是不一樣的情況來看個例子,這裡假設甜點的稅率是0.05,奶制品的是0.1,家具類的是0.2:,下面是存儲過程:
上面增加了一個保存產品類型的一個變量proType,用來保存商品類型。然後使用CASE來進行判斷來設置稅率,下面是測試的部分:
可以看到沙發的價格是1250*1.2=1500,而蛋糕的價格是10*1.05 = 10.5